2013-07-17 39 views
4
SELECT DISTINCT emp_no, sum(CASE WHEN isnull(PresAbs,0)='WO' THEN 1 ELSE 0 END) WO, 
    sum(CASE WHEN isnull(PresAbs,0)='WP' THEN 1 ELSE 0 END) WP, 
sum(CASE WHEN isnull(PresAbs,0)='HL' THEN 1 ELSE 0 END) HL, 
sum(CASE WHEN isnull(PresAbs,0)='A' THEN 1 ELSE 0 END) A,**sum(WO+WP+HL+A)** 
from TRN_ATTN072013 WHERE CONVERT(varchar,Tdate,112)>'20130712' and CONVERT(varchar,Tdate,112)<'20130717' 
group by emp_no 
ORDER BY emp_no 

我想總結一下這列WO,WP,HL,A我如何總結這些列之列的那些

+0

其中RDBMS是什麼呢? MySQL或SQL SERVER或RDBMS不可知論者? –

回答

6

如果這是SQL server那麼你可以使用SQL已經總結CTE

with tablesum as 
(
    SELECT DISTINCT emp_no, sum(CASE WHEN isnull(PresAbs,0)='WO' THEN 1 ELSE 0 END) WO, 
          sum(CASE WHEN isnull(PresAbs,0)='WP' THEN 1 ELSE 0 END) WP, 
          sum(CASE WHEN isnull(PresAbs,0)='HL' THEN 1 ELSE 0 END) HL, 
          sum(CASE WHEN isnull(PresAbs,0)='A' THEN 1 ELSE 0 END) A 
    from TRN_ATTN072013 
    WHERE CONVERT(varchar,Tdate,112) > '20130712' and CONVERT(varchar,Tdate,112) < '20130717' 
    group by emp_no  
) 

select t.*, t.WO + t.WP + t.HL + t.A 
from tablesum t 
order by t.emp_no 
在MySQL
+0

這是各種錯誤。在CTE中排序? SUM沒有分組? –

+0

是的,抱歉有點倉促。 – gzaxx

+0

你爲什麼按照你所彙總的內容進行分組?爲什麼不把這個底部的部分改成像select t。*,t.WO + t.WP + t.HL + t.A from tablesum t order by t.emp_no –

2

;)

SELECT emp_no, wo+wp+hl+A FROM 
(SELECT DISTINCT emp_no, sum(CASE WHEN isnull(PresAbs,0)='WO' THEN 1 ELSE 0 END) WO, 
sum(CASE WHEN isnull(PresAbs,0)='WP' THEN 1 ELSE 0 END) WP, 
sum(CASE WHEN isnull(PresAbs,0)='HL' THEN 1 ELSE 0 END) HL, 
sum(CASE WHEN isnull(PresAbs,0)='A' THEN 1 ELSE 0 END) A,**sum(WO+WP+HL+A)** 
from TRN_ATTN072013 WHERE CONVERT(varchar,Tdate,112)>'20130712' and CONVERT(varchar,Tdate,112)<'20130717' 
group by emp_no 
ORDER BY emp_no) AS SUB_Q;