2014-10-07 54 views
0

我試圖讓兩個單獨的值的總和出現在一行中,每個唯一的ID。我嘗試了幾條路線,但仍然無法讓所有內容都出現在一行中。我已經嘗試了幾種使用case語句的不同方法,並且我嘗試了使用OVER與分區,也無濟於事。需要在一列中計算兩個單獨的值

這是到目前爲止我的查詢:

select distinct ID_NUM, 
    sum(case when isnull(sch.SUBTERM_CDE,0) like '%N' then 1 else 0 end) as 'total_n', 
    sum(case when isnull(sch.SUBTERM_CDE,0) like '%T' then 1 else 0 end) as 'total_t' 
from STUDENT_CRS_HIST sch 
where sch.END_DTE > GETDATE() 
group by sch.ID_NUM, sch.SUBTERM_CDE 
order by ID_NUM 

回答

2

你幾乎對的,但你是一個額外的列分組:

SELECT ID_NUM, 
     SUM(CASE WHEN sch.SUBTERM_CDE LIKE '%N' THEN 1 ELSE 0 END) AS total_n, 
     SUM(CASE WHEN sch.SUBTERM_CDE LIKE '%T' THEN 1 ELSE 0 END) AS total_t 
FROM STUDENT_CRS_HIST sch 
WHERE sch.END_DTE > GETDATE() 
GROUP BY sch.ID_NUM -- you shouldn't group by SUBTERM_CDE 
ORDER BY ID_NUM 
+0

謝謝,這是訣竅!那個分組是我之前的努力之一,sql對我大肆宣傳,包括它:) – Jana 2014-10-07 15:19:10

1

更改group by刪除SUBTERM_CDE

select ID_NUM, 
     sum(case when sch.SUBTERM_CDE like '%N' then 1 else 0 end) as total_n, 
     sum(case when sch.SUBTERM_CDE like '%T' then 1 else 0 end) as total_t 
from STUDENT_CRS_HIST sch 
where sch.END_DTE > GETDATE() 
group by sch.ID_NUM 
order by ID_NUM; 

另外:

  • distinct是不需要和誤導。
  • 列別名不應包含在單引號中(只對字符串和日期常量使用單引號)。
  • NULL的文本是不必要的 - 並且具有誤導性。替代值是一個整數,但該字段應該是一個字符串。