SQL 服务器 select 并用相等的列组合跨行的值

SQL Server select and combine values across rows with equal columns

我发现有几个问题与此有一点关系,但在这种情况下没有一个能满足我的所有需求。不幸的是,我还不够好 SQL 还没有把它们放在一起。

基本上我 select 从 table 中提取几行,我只想 select 行的一列具有不同的值,但要合并来自所有行的值隐藏在不同的列中,并在显示的行中显示该总和。

另外,我想 select 仅 1 列的不同值。

这是一个例子:

ID  #_of_Items  Place   Description
=======================
1        2       CA     towels
2        4       NY     shirts
3        1       MA     hats
4        3       CA     shorts
4        2       CA     pins
4        4       NY     socks

我想 select:

Place    #_of_Items
=======================
CA        7
NY        8
MA        1

只需要两列 - 基本上,这个地方是唯一的,但它从隐藏行中获取所有 #_of_items 的总和,并将它们添加到它显示的每个状态的一行中。

然后,如果可能的话,我还想select描述栏中所有不同条目的组合,所以:

"towels, shirts, hats, shorts, pins, socks"

我希望这是有道理的。

先谢谢大家了!

如果您可以在数据库中创建用户定义的函数(替换为您的 table 名称):

CREATE FUNCTION dbo.JoinItems(@place nvarchar(10))
    RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @list NVARCHAR(MAX)
    SELECT @list = CASE WHEN @list IS NULL THEN N'' ELSE @list + N', ' END + description
      FROM <table>
     WHERE place = @place
    RETURN @list
END
GO

然后您可以在查询中使用 return 项目计数以及特定于该地点的项目列表(同样,用您的 table 名称替换):

SELECT place,
       [#_of_Items] = SUM([#_of_Items]),
       Items = dbo.JoinItems(place)
  FROM <table>
 GROUP BY place 

SQL 2005+:

SELECT ID, Place, Description
      SUM(#_of_Items) OVER(PARTITION BY Place) AS #_of_Items
FROM Your_Table