【问题标题】:How do I put the results of each group on one row? [duplicate]如何将每组的结果放在一行? [复制]
【发布时间】:2013-12-09 19:55:54
【问题描述】:
select id, productid, optionid 
from tableA
where productid = 1

结果(id、productid、optionid)

1 1 1
2 1 2
3 1 5

我希望结果为 (productid, optionids):

1 1,2,5

当然,我认为下面的查询应该会产生上述结果

select productid, optionid 
from tableA
group by productid 

但是我把 optionid 放在什么函数里呢?

【问题讨论】:

  • 你看过 Pivot 子句吗?
  • 没有,第一次听说。
  • 这已经被问过很多次了。只需使用 sql-server 和组连接进行快速搜索

标签: sql-server tsql


【解决方案1】:

您可以使用FOR XML PATH(在STUFF 函数的帮助下)来做到这一点。您不能分组,因为遗憾的是没有用于连接字符串的聚合函数。

select distinct a.productid,
stuff((select ','+cast(s.optionid as varchar(10))
       from tableA s 
       where s.productid = a.productid 
       for XML path('')),1,1,'')
from tableA a

SQL Fiddle demo

【讨论】:

  • +1 回答,但请不要像 STUFF 函数那样说它正在进行连接,因为它只是删除了多余的逗号。正是XML PATH 让这成为可能。
  • 非常正确,我会更新我的答案。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2019-12-12
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 2016-01-16
相关资源
最近更新 更多