//我希望此查询在View中转换,以便我的Crystal报表可以快速加载此视图,因为当前Crystal报表在5分钟内加载此查询并且我们经常使用该报表。
;WITH Ref (rDate, rNo, rCode, rName, rConv, rDoc, fPeriod, fYear, rQty) AS
(
SELECT IM.invm_Date, ID.invm_No, ID.itm_ItemCode, I.itm_ItemDesc, itm_SellToStore, ID.docs_DocCode,ID.invm_Period, ID.invm_Year, invd_Size
FROM SI_InventoryDetail
WHERE IM.Docs_DocCode IN ('GRN', 'D.C', 'SAI', 'SAO')
)
SELECT (CONVERT(VARCHAR(10), fYear) + REPLACE(STR(fPeriod, 2, 0), ' ', 0)) AS [Code],
(CASE fPeriod WHEN 1 THEN '01 - July' WHEN 2 THEN '02 - August' WHEN 3 THEN '03 - September'
WHEN 4 THEN '04 - October' WHEN 5 THEN '05 - November' WHEN 6 THEN '06 - December'
WHEN 7 THEN '07 - January' WHEN 8 THEN '08 - February' WHEN 9 THEN '09 - March'
WHEN 10 THEN '10 - April' WHEN 11 THEN '11 - May' WHEN 12 THEN '12 - June'
END) AS fPeriod,
fYear, (CASE WHEN fPeriod < 7 THEN fYear WHEN fPeriod > 6 THEN fYear + 1 END) AS cYear, R.rCode, R.rName, rConv,
ISNULL( ( SELECT ( SUM(CASE WHEN SID.docs_DocCode IN ('SAI','GRN') THEN ((FLOOR(ISNULL(invd_Size,0)) * SID.invd_Conversion )+((ISNULL(invd_Size,0)-FLOOR(ISNULL(invd_Size,0)))*100)) END)
- SUM(CASE WHEN SID.docs_DocCode IN ('SAO','D.C') THEN ((FLOOR(ISNULL(invd_Size,0)) * SID.invd_Conversion )+((ISNULL(invd_Size,0)-FLOOR(ISNULL(invd_Size,0)))*100)) END)
) AS OB1
FROM SI_InventoryDetail AS SID LEFT JOIN SI_InventoryMaster AS SIM
ON SID.invm_No = SIM.invm_No AND SID.docs_DocCode = SIM.docs_DocCode
AND SID.invm_Year = SIM.invm_Year
WHERE SID.Docs_DocCode IN ('SAI', 'SAO', 'GRN', 'D.C')
AND SID.itm_ItemCode = R.rCode AND
(CONVERT(VARCHAR(10), SID.invm_Year) + REPLACE(STR(SID.invm_Period, 2, 0), ' ', 0))
< (CONVERT(VARCHAR(10), R.fYear) + REPLACE(STR(R.fPeriod, 2, 0), ' ', 0))
),0) AS OB,
GRN, DC, SAI, SAO -- ((OB+GRN+SAI)-(DC+SAO))AS Balance,
FROM Ref AS R
CROSS APPLY ( SELECT ISNULL(SUM((FLOOR(rQty)*rConv)+((rQty-FLOOR(rQty))*100)),0) AS GRN
FROM Ref AS R_GRN
WHERE R_GRN.rDoc = 'GRN' AND R_GRN.rCode = R.rCode AND (CONVERT(VARCHAR(10), R_GRN.fYear) + REPLACE(STR(R_GRN.fPeriod, 2, 0), ' ', 0)) =(CONVERT(VARCHAR(10), R.fYear) + REPLACE(STR(R.fPeriod, 2, 0), ' ', 0))
) AS C_GRN
CROSS APPLY ( SELECT ISNULL(SUM((FLOOR(rQty)*rConv)+((rQty-FLOOR(rQty))*100)),0) AS DC
FROM Ref AS R_DC
WHERE R_DC.rDoc = 'D.C' AND R_DC.rCode = R.rCode AND (CONVERT(VARCHAR(10), R_DC.fYear) + REPLACE(STR(R_DC.fPeriod, 2, 0), ' ', 0)) = (CONVERT(VARCHAR(10), R.fYear) + REPLACE(STR(R.fPeriod, 2, 0), ' ', 0))
) AS C_DC
CROSS APPLY ( SELECT ISNULL(SUM((FLOOR(rQty)*rConv)+((rQty-FLOOR(rQty))*100)),0) AS SAI
FROM Ref AS R_SAI
WHERE R_SAI.rDoc = 'SAI' AND R_SAI.rCode = R.rCode AND (CONVERT(VARCHAR(10), R_SAI.fYear) + REPLACE(STR(R_SAI.fPeriod, 2, 0), ' ', 0)) = (CONVERT(VARCHAR(10), R.fYear) + REPLACE(STR(R.fPeriod, 2, 0), ' ', 0))
) AS C_SAI
CROSS APPLY ( SELECT ISNULL(SUM((FLOOR(rQty)*rConv)+((rQty-FLOOR(rQty))*100)),0) AS SAO
FROM Ref AS R_SAO
WHERE R_SAO.rDoc = 'SAO' AND R_SAO.rCode = R.rCode AND (CONVERT(VARCHAR(10), R_SAO.fYear) + REPLACE(STR(R_SAO.fPeriod, 2, 0), ' ', 0)) = (CONVERT(VARCHAR(10), R.fYear) + REPLACE(STR(R.fPeriod, 2, 0), ' ', 0))
) AS C_SAO
GROUP BY (CONVERT(VARCHAR(10), fYear) + REPLACE(STR(fPeriod, 2, 0), ' ', 0)), R.fPeriod, fYear, R.rCode, R.rName, rConv, GRN, DC, SAI, SAO
HAVING (CONVERT(VARCHAR(10), R.fYear) + REPLACE(STR(R.fPeriod, 2, 0), ' ', 0)) IN ('201201','201202','201203','201204','201205','201206','201207',) AND rCode IN('11001','11002','11003','11004','11005','11006','11007','11008','12001','12002')