SQL 查询即时库存(带查询仓位名称)原创
金蝶云社区-fengyj
fengyj
27人赞赏了该文章 242次浏览 未经作者许可,禁止转载编辑于2024年04月24日 13:51:04

SQL 语句查询即时库存,带有查询仓位名称,如果不需要查询仓位名称,可以把With 语句部分去掉:


WITH TEMPA
          AS ( SELECT DISTINCT
                        a.FSTOCKID ,
                        a.FSTOCKLOCID ,
                        'FF' + CAST (B.FFLEXID AS VARCHAR) FFLEXID ,
                        CASE WHEN B.FFLEXID = 100001 THEN c.FF100001 --需要根据实际的维度改下,T_BAS_FLEXVALUESDETAIL中FF1000的字段都要填上
                             WHEN B.FFLEXID = 100002 THEN c.FF100002
                             ELSE 0
                        END FFLEXVALUE
               FROM     T_STK_INVENTORY a  --T_STK_INVENTORY代表数据源,可替换成仓位所在表,如单据明细、即时库存等
                        INNER JOIN T_BD_STOCKFLEXITEM B ON a.FSTOCKID = B.FSTOCKID
                        LEFT JOIN T_BAS_FLEXVALUESDETAIL c ON c.FID = a.FSTOCKLOCID
             ),
    TEMPB AS
    (
    SELECT  T2.FSTOCKLOCID ,
            FSTOCKLOC = ( STUFF(( SELECT    ',' + T1.FNAME
                                  FROM      ( SELECT DISTINCT
                                                        A.FSTOCKLOCID ,
                                                        B.FNAME
                                              FROM      TEMPA A
                                                        INNER JOIN T_BAS_FLEXVALUESENTRY_L B ON A.FFLEXVALUE = B.FENTRYID
                                                              AND B.FLOCALEID = 2052
                                            ) T1
                                  WHERE     T1.FSTOCKLOCID = T2.FSTOCKLOCID
                                FOR
                                  XML PATH('')
                                ), 1, 1, '') )
    FROM    ( SELECT DISTINCT
	A.FSTOCKLOCID ,
                        B.FNAME
              FROM      TEMPA A
                        INNER JOIN T_BAS_FLEXVALUESENTRY_L B ON A.FFLEXVALUE = B.FENTRYID
                                                              AND B.FLOCALEID = 2052
            ) T2
    GROUP BY T2.FSTOCKLOCID
    )
SELECT  a.FID ,
           a.FSTOCKORGID ,--库存组织
           a.FKEEPERTYPEID , --保管者类型
           a.FKEEPERID ,--保管者
           a.FOWNERTYPEID ,--货主类型
           a.FOWNERID ,--货主
           a.FSTOCKID ,--仓库
           a.FSTOCKLOCID ,--仓位
		   ISNULL(loc.FSTOCKLOC,'') FSTOCKLOC,--仓位
           a.FAUXPROPID ,--辅助属性
           a.FSTOCKSTATUSID ,--库存状态
           a.FLOT ,--批号
           a.FBOMID ,--BOM版本
           a.FMTONO ,--计划跟踪号
           a.FPROJECTNO ,--项目编号
           (CASE WHEN d.FISEXPPARTOFLOT='1' THEN e.FPRODUCEDATE ELSE a.FPRODUCEDATE END) FPRODUCEDATE ,--生产日期
           (CASE WHEN d.FISEXPPARTOFLOT='1' THEN e.FEXPIRYDATE ELSE a.FEXPIRYDATE END) FEXPIRYDATE ,--有效期至
           a.FBASEUNITID ,--基本单位
           a.FBASEQTY ,--库存基本单位数量
           a.FSECQTY ,--辅单位数量
           a.FSTOCKUNITID ,--库存单位
           c.FMATERIALID ,--物料內码
           (CASE WHEN d.FSTOREURNUM=0 THEN a.FBASEQTY ELSE a.FBASEQTY*d.FSTOREURNOM/d.FSTOREURNUM END) FQTY ,--库存主单位数量
           (CASE WHEN d.FSTOREURNUM=0 THEN ISNULL(b.FBASELOCKQTY, 0) ELSE ISNULL(b.FBASELOCKQTY, 0)*d.FSTOREURNOM/d.FSTOREURNUM END) FLOCKQTY ,--锁库数量
           a.FSECUNITID ,--辅单位
           (CASE WHEN d.FSTOREURNUM=0 THEN (a.FBASEQTY - ISNULL(b.FBASELOCKQTY, 0)) ELSE (a.FBASEQTY - ISNULL(b.FBASELOCKQTY, 0))*d.FSTOREURNOM/d.FSTOREURNUM END) FAVBQTY ,--可用量
           a.FUPDATETIME ,--最近更新日期
           a.FISEFFECTIVED,--是否有效库存
        ISNULL(b.FBASELOCKQTY, 0) FBASELOCKQTY ,--锁库数量(基本单位)
        ISNULL(b.FSECLOCKQTY, 0) FSECLOCKQTY ,--锁库数量(辅单位)
        ( a.FBASEQTY - ISNULL(b.FBASELOCKQTY, 0) ) FBASEAVBQTY ,--可用量(基本单位)
        ( a.FSECQTY - ISNULL(b.FSECLOCKQTY, 0) ) FSECAVBQTY--可用量(辅单位)
FROM    T_STK_INVENTORY a --即时库存表
        INNER JOIN T_BD_MATERIAL c ON c.FMASTERID=a.FMATERIALID and c.FUSEORGID=a.FSTOCKORGID --物料表
		INNER JOIN T_BD_MATERIALSTOCK d ON d.FMATERIALID=c.FMATERIALID
		INNER JOIN T_BD_STOCK stock on stock.FSTOCKID=a.FSTOCKID --仓库表
		INNER JOIN T_ORG_ORGANIZATIONS org on org.FORGID=a.FSTOCKORGID --库存组织
		LEFT JOIN T_BD_LOTMASTER e on e.FLOTID=a.FLOT --批号
		LEFT JOIN TEMPB loc ON loc.FSTOCKLOCID = a.FSTOCKLOCID  --关联查询仓位名称
        LEFT JOIN ( SELECT  TKE.FSUPPLYINTERID ,--锁库数量相关,不需要考虑可用量可以不要这个join
                            SUM(ISNULL(TKE.FBASEQTY, 0)) AS FBASELOCKQTY ,
                            SUM(ISNULL(TKE.FSECQTY, 0)) AS FSECLOCKQTY
                    FROM    T_PLN_RESERVELINKENTRY TKE
                    WHERE   TKE.FSUPPLYFORMID = 'STK_Inventory'
                            AND TKE.FBASEQTY > 0
                            AND ((
                            TKE.FLINKTYPE = '4' AND 1= (
                            SELECT COUNT(1) FROM T_BAS_SYSPARAMETER WHERE fparameterobjid='MFG_PLNParam' AND fparameters.exist('/BillHead[IsEnableReserve="True"]')=0)
                            ) OR (1=1 AND 0=(SELECT COUNT(1) FROM T_BAS_SYSPARAMETER WHERE fparameterobjid='MFG_PLNParam' AND fparameters.exist('/BillHead[IsEnableReserve="True"]')=0))
                            )
                    GROUP BY TKE.FSUPPLYINTERID
                  ) b ON b.FSUPPLYINTERID = a.FID;


赞 27