2010-09-28 65 views
4
SELECT 
    sum(qty) as accept, 
    (SELECT sum(qty) 
    FROM pile 
    WHERE pf=false) as reject 
FROM pile 
WHERE pf=true; 

這就是我目前使用的SQL,但我猜它不是最佳實踐? 我以前使用的另一種選擇是SELECT sum(qty) FROM pile GROUP BY pf,但我需要它們作爲列而不是行。如何從不同where子句的表中獲得兩次總和()?

還有其他解決方案嗎?

回答

8

一次通過表。

SELECT 
    sum(CASE WHEN pf = TRUE THEN qty ELSE 0 END) as accept, 
    sum(CASE WHEN pf = FALSE THEN qty ELSE 0 END) as reject 
FROM pile; 
2
SELECT pileTrue.sumTrue as accept, pileFalse.sumFalse as reject 
FROM 
(SELECT sum(qty) sumFalse FROM pile WHERE pf=false) as pileFalse, 
(SELECT sum(qty) sumTrue FROM pile WHERE pf=true) as pileTrue 
1

沒有更好的,但更可讀的國際海事組織。

SELECT 
accept = (SELECT sum(qty) FROM pile WHERE pf = true), 
reject = (SELECT sum(qty) FROM pile WHERE pf = false) 
0
check it 



    select max(accept), max(v2) 
    from 
    (
       SELECT 
        sum(qty) as accept,null v2 
       FROM pile 
       WHERE pf=true 
       union 
       SELECT null accept,sum(qty) v2 
        FROM pile 
        WHERE pf=false 
    ) 
    group by accept,v2 
0
SELECT (SELECT SUM(qty) 
      FROM pile 
     WHERE pf = true) AS accept, 
     (SELECT SUM(qty) 
      FROM pile 
     WHERE pf = false) AS reject 
相關問題