我想显示由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 或其他一些聚合函数,但是告诉服务器不要打扰并且如果有不相同的事件,那就好了 - 那就这样吧 - 让它吧崩溃,烧伤,哭泣或撒谎 - 毕竟,我写了一个错误的脚本是我的问题。
所以:
答案 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