我试图让两个单独的值的和出现在一行中,每个唯一的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发布于 2014-10-07 15:07:52
您几乎是对的,但是您正在按一个额外的列进行分组:
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发布于 2014-10-07 15:09:33
更改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的文本是不必要的--而且具有误导性。替代值是一个整数,但该字段应该是一个字符串。https://stackoverflow.com/questions/26239089
复制相似问题