我是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,
答案 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