GROUP BY中的CASE

时间:2011-03-25 20:35:06

标签: sql-server-2005

如何有选择地选择分组列?我可以在里面使用CASE吗?它编译正常,但似乎在运行时没有工作。

示例:

GROUP BY o.organization_name ol.org_level_name, work_date,
 CASE WHEN @org_level_type = 'Department' THEN jd.job_code ELSE jd.job_department_id END

感谢。

1 个答案:

答案 0 :(得分:0)

编辑答案

这可能不是一个好主意。只需将其划分为2个单独的查询,以避免从一个适合所有查询的不必要的排序操作。

您可以将在表ojdol(没有GROUP BY)上进行联接的大部分查询放入视图中以避免重复一遍。

原始答案

(假设2列是兼容的数据类型)

select o.organization_name,
       ol.org_level_name,
       work_date,
       code_or_dept
FROM   ...
       CROSS APPLY (SELECT CASE
                             WHEN @org_level_type = 'Department' THEN
                             jd.job_code
                             ELSE jd.job_department_id
                           END AS code_or_dept) c
GROUP  BY o.organization_name,
          ol.org_level_name,
          work_date,
          code_or_dept  
相关问题