我是sql服务器的新手,从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,发布于 2014-03-27 06:08:26
也许您可以将查询包装在子查询中,并在select和group by中使用别名。在这个例子中它看起来有点笨重,但是如果你有更复杂的大小写开关,或者不止一个,那么这个解决方案可能会更小,更具可读性。
select
CaseField
from
(select
case when 1 = 2 then
3
else 4 end as CaseField
from
YourTable t) c
group by
CaseFieldhttps://stackoverflow.com/questions/22673956
复制相似问题