2010-09-14 183 views
1

查詢:如何SQL Statement with With語句?

;WITH SuperSelect AS (
SELECT DISTINCT 
     DropshipPackinglist.CaseNumber AS 'CASE NO.', 
     DropshipPackinglist.Quantity AS 'QTY' 
    FROM DropshipPackinglist 
    JOIN HuaweiDescription ON DropshipPackinglist.ItemNumber = HuaweiDescription.ItemNumber 
    WHERE (DropshipPackinglist.BatchCode ='0003721008190AHWA01KG')) 
SELECT COUNT(A) as PALLET , 
     [TOTAL VOLUME (MM3)], 
     CASE 
     WHEN [TOTAL VOLUME (MM3)] = '1090x730x1460' THEN Count(A) * 1.09*0.73*1.46 
     WHEN [TOTAL VOLUME (MM3)] = '1090x730x1230' THEN Count(A) * 1.09*0.73*1.23 
     WHEN [TOTAL VOLUME (MM3)] = '1090x730x1000' THEN Count(A) * 1.09*0.73*1.00 
     WHEN [TOTAL VOLUME (MM3)] = '1090x730x780' THEN Count(A) * 1.09*0.73*0.78 
     WHEN [TOTAL VOLUME (MM3)] = '1090x730x570' THEN Count(A) * 1.09*0.73*0.57 
     WHEN [TOTAL VOLUME (MM3)] = '1090x730x350' THEN Count(A) * 1.09*0.73*0.35 
     ELSE 'Unknown' 
     END as 'WEIGHT' 
FROM (SELECT DISTINCT 
       SUM([QTY]) OVER (partition BY ss.[CASE NO.]) as A, 
       CASE 
        WHEN sum([QTY]) OVER (partition BY ss.[CASE NO.]) >= 31 
        AND sum([QTY]) OVER (partition BY ss.[CASE NO.]) <= 36 THEN '1090x730x1460' 
        WHEN sum([QTY]) OVER (partition BY ss.[CASE NO.]) >= 25 
        AND sum([QTY]) OVER (partition BY ss.[CASE NO.]) <= 30 THEN '1090x730x1230' 
        WHEN sum([QTY]) OVER (partition BY ss.[CASE NO.]) >= 19 
        AND sum([QTY]) OVER (partition BY ss.[CASE NO.]) <= 24 THEN '1090x730x1000' 
        WHEN sum([QTY]) OVER (partition BY ss.[CASE NO.]) >= 13 
        AND sum([QTY]) OVER (partition BY ss.[CASE NO.]) <= 18 THEN '1090x730x780' 
        WHEN sum([QTY]) OVER (partition BY ss.[CASE NO.]) >= 7 
        AND sum([QTY]) OVER (partition BY ss.[CASE NO.]) <= 11 THEN '1090x730x570' 
        WHEN sum([QTY]) OVER (partition BY ss.[CASE NO.]) >= 1 
        AND sum([QTY]) OVER (partition BY ss.[CASE NO.]) <= 6 THEN '1090x730x350' 
        ELSE 'Unkown' 
       END AS 'TOTAL VOLUME (MM3)' 
      FROM SuperSelect ss) AS CountPallet 
GROUP BY [TOTAL VOLUME (MM3)] 

我有這樣的結果:

PALLET TOTAL VOLUME (MM3) WEIGHT 
-------------------------------------- 
2  1090x730x1230  1.957422 
1  1090x730x1460  1.161722 

我的問題是,我還需要添加一列來計算權重的總和。

示例結果:

PALLET TOTAL VOLUME (MM3) WEIGHT TOTALWEIGHT 
--------------------------------------------------- 
2  1090x730x1230  1.957422 3.119144 
1  1090x730x1460  1.161722 3.119144 

回答

1

您可以使用SUM ... OVER()

由於權重的確定是相當長的是和你的派生表可以進入其他的CTE。

喜歡的東西

;WITH 
SuperSelect AS (SELECT DISTINCT... '0003721008190AHWA01KG'), 
CountPallet AS (SELECT... FROM SuperSelect ss), 
NewCTE AS (SELECT COUNT(A) ... GROUP BY [TOTAL VOLUME (MM3)]) 

select PALLET, [TOTAL VOLUME (MM3)], isnull(WEIGHT,'Unknown') AS WEIGHT, 
SUM(WEIGHT) OVER() AS TOTALWEIGHT 
from NewCTE 

您需要在case表達擺脫你else,以確保質量爲數字。