sql server group with with a ali

时间:2014-03-26 22:00:30

标签: sql sql-server group-by

我是sql server的新手,从mysql过渡。

我有一个复杂的案例陈述,我想分组6小时和其他。可能变得更大。为了能够运行它,我需要在每次修改时将语句复制到组中。在mySql中,我只按列号分组。这有什么工作吗?使代码非常难看。

在为我的案例创建子查询时是否会有性能损失,然后只对结果字段进行分组。似乎试图使代码更优雅会导致查询使用更多资源。

由于

以下是我正在分组的字段。当我为更多边缘情况对字段进行修改时,我需要在最多3个位置更改代码。制作一些非常难看的代码,我自己也不需要额外的帮助。

dz_code = case 
      when isnull(dz.dz_code,'N/A') in ('GAB', 'MAB', 'N/A')  and dc.howdidyouhear = 'Television' then 'Television'
      when isnull(dz.dz_code,'N/A') in ('GAB', 'MAB', 'N/A')  and dc.howdidyouhear in ('Other', 'N/A') then 'Other'
      WHEN dz.dz_code = 'irs,irs' THEN 'irs'
      when dz.dz_code like '%SDE%' THEN 'SDE'
      when dz.dz_code like 'referral,' then REPLACE(dz.dz_code, 'referral','')
      when charindex(',',dz.dz_code) = 4 then left(dz.dz_code,3)

    else
      dz.dz_code
    END,

1 个答案:

答案 0 :(得分:1)

也许您可以将查询包装在子查询中并使用select和group by中的别名。在这个例子中看起来有点笨重,但是如果你有更复杂的案例开关,或者不止一个,那么这个解决方案可能会更小,更具可读性。

select
  CaseField
from
  (select
    case when 1 = 2 then
      3
    else 4 end as CaseField
  from
    YourTable t) c
group by
  CaseField