按自定义列进行分组,该列由多个实际列

时间:2016-08-19 08:13:56

标签: sql sql-server group-by

我想显示由DB中的多个列构成的位置信息,但我需要按ID对其进行分组。我得到的解决方案是按以下方式将构成列列为groupees。

select 
  Id,
  Name,
  Here + ' and ' + There as Location,
  count(*) as Count
from KnownStuff
group by Id, Name, Here, There

但是,我想知道是否有一个更像是专横的方式来分组该专栏,i.d。与此类似的东西。

group by Id, Name, Location

或者,甚至更好(虽然,根据我的googlearching,我很确定这是不可能的),我想排除 Id <之外的所有其他列/ em>来自分组约束。在某些情况下,我会使用 sum 或其他一些聚合函数,但是告诉服务器不要打扰并且如果有不相同的事件,那就好了 - 那就这样吧 - 让它吧崩溃,烧伤,哭泣或撒谎 - 毕竟,我写了一个错误的脚本是我的问题。

所以:

  1. 对自定义列进行分组是否有类似专横的方法?
  2. 现在是否有一种让我更容易接受的方法?

3 个答案:

答案 0 :(得分:2)

将查询包装在派生表中。做GROUP BY结果:

select id, name, location, count(*)
from
(
select 
  Id,
  Name,
  Here + ' and ' + There as Location,
from KnownStuff
)
group by Id, Name, location

答案 1 :(得分:1)

可以使用SQL CTE表达式封装Select可以是一种方式

;with cte as (
select 
  Id,
  Name,
  Here + ' and ' + There as Location,
  --count(*) as Count
from KnownStuff
--group by Id, Name, Here, There
)
select
    Id, Name, Location, count(*) as [Count]
from cte
group by Id, Name, Location

这实际上就像一个子查询

答案 2 :(得分:1)

您可以将计算列添加到表格中。

alter table knownstuff add Location as (Here + ' and ' + There)

计算列不是物理存储的。然后,您可以将查询重写为:

select 
  Id,
  Name,
  Location,
  count(*) as Count
from KnownStuff
group by Id, Name,Location