首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有别名的sql server group by

具有别名的sql server group by
EN

Stack Overflow用户
提问于 2014-03-27 06:00:30
回答 1查看 140关注 0票数 0

我是sql服务器的新手,从mysql过渡过来。

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

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

谢谢

下面是我正在分组的一个字段。当我为更多的边缘情况修改字段时,我需要在最多3个地方更改代码。产生了一些非常丑陋的代码,我自己也不需要额外的帮助。

代码语言:javascript
复制
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,
EN

回答 1

Stack Overflow用户

发布于 2014-03-27 06:08:26

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

代码语言:javascript
复制
select
  CaseField
from
  (select
    case when 1 = 2 then
      3
    else 4 end as CaseField
  from
    YourTable t) c
group by
  CaseField
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22673956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档