2010-09-28 63 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 
相关问题