2014-10-07 53 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的文本是不必要的 - 并且具有误导性。替代值是一个整数,但该字段应该是一个字符串。
相关问题