;在VIEW中不保存Ref查询

时间:2013-07-20 08:13:41

标签: sql

//我希望此查询在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')

0 个答案:

没有答案