2017-08-25 56 views
1

我有下面的代碼,它將結果呈現在有幾列的表中。SQL Server:幾個選擇的總和

SELECT 
    ref, design, 
    ISNULL((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 34 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'LPP', 
    ISNULL((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 28 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'LPM', 
    ISNULL((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 42 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'RNPM', 
    ISNULL((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 68 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'RAM', 
    ISNULL((SELECT Sum(qtt2) FROM bi(nolock) WHERE bi.ndos = 68 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'RA' , 
    ISNULL((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 59 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'GD' 
FROM 
    bi(nolock) temp 
WHERE 
    (temp.ndos = 34 OR temp.ndos = 28 OR temp.ndos = 42 OR temp.ndos = 68) 
    AND temp.bofref LIKE #1# 
    AND temp.ref NOT LIKE ' ' 
GROUP BY 
    ref, design 
ORDER BY 
    ref 

我現在要總結在新列的一些選擇的值,比如我想在一個總列求和列「LPP,RNPM和RA」,但我不能讓它工作。

怎麼辦?

+0

刪除子查詢和用例。像在where子句一樣,就像沒有任何理由殺死你的查詢。 – Prathyush

+0

我不知道其他方式來做到這一點。 #1#是由用戶編寫的變量,可以使用多種格式,如xx.xxxx.xx或xx.xxxx或xx。代碼必須查找與變量匹配的所有結果。 – NelsonPaiva

回答

0

如果我理解正確的話可以總結的單列

SELECT 
      ref 
     , design 
    Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 34 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'LPP', 
    Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 28 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'LPM', 
    Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 42 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'RNPM', 
    Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 68 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'RAM', 
    Isnull((SELECT Sum(qtt2) FROM bi(nolock) WHERE bi.ndos = 68 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'RA' , 
    Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 59 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'GD', 
    Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 34 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) + 
    Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 28 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) + 
    Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 42 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) + 
    Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 68 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) as TOTAL_COLUMN 

    FROM bi(nolock) temp 
    WHERE (temp.ndos = 34 
     OR temp.ndos = 28 
     OR temp.ndos = 42 
     OR temp.ndos = 68) 
    AND temp.bofref like #1# 
    AND temp.ref NOT LIKE ' ' 
    GROUP BY ref, 
     design 
    ORDER BY ref 
+0

工作表示感謝。 – NelsonPaiva

0

的最直接方式是包裝您的查詢在其他:

SELECT sub.*, 
     LPP + RNPM + RA as LPP_RNPM_RA 
FROM (  
    SELECT ref, design, 
     Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 34 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'LPP', 
     Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 28 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'LPM', 
     Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 42 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'RNPM', 
     Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 68 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'RAM', 
     Isnull((SELECT Sum(qtt2) FROM bi(nolock) WHERE bi.ndos = 68 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'RA' , 
     Isnull((SELECT Sum(qtt) FROM bi(nolock) WHERE bi.ndos = 59 AND bofref like #1# AND bi.ref = temp.ref GROUP BY ref), 0) AS 'GD' 
    FROM bi(nolock) temp 
    WHERE temp.ndos IN (34, 28, 42, 68) 
     AND temp.bofref like #1# 
     AND temp.ref NOT LIKE ' ' 
    GROUP BY ref, 
      design 
    ) as sub 
ORDER BY ref 

注意,你可以用它代替你在where條款有OR組合IN操作。

而且,你的方法和看起來很笨拙:不做子查詢,但在這樣做您的select

 Sum(CASE WHEN temp.ndos = 34 THEN qtt ELSE 0 END) AS 'LPP', 

...等

+0

我嘗試這個,但沒有結果。 沒有錯誤,但也沒有結果。 我會試着看看我能否找到問題所在。 謝謝 – NelsonPaiva