Sql server SQL Server跨具有相等列的行选择并组合值

Sql server SQL Server跨具有相等列的行选择并组合值,sql-server,select,distinct,concat,Sql Server,Select,Distinct,Concat,我发现有几个问题稍微涉及到这一点,但在这种情况下,没有什么能满足我的所有需要。不幸的是,我在SQL方面还不够好,无法将它们全部放在一起 基本上,我是从一个表中选择几行,我只想为一列选择具有不同值的行,但要组合从另一列隐藏的所有行中的值,并在确实显示的行中显示总和 另外,我想从1列中选择不同的值 以下是一个例子: ID #_of_Items Place Description ======================= 1 2 CA towels 2

我发现有几个问题稍微涉及到这一点,但在这种情况下,没有什么能满足我的所有需要。不幸的是,我在SQL方面还不够好,无法将它们全部放在一起

基本上,我是从一个表中选择几行,我只想为一列选择具有不同值的行,但要组合从另一列隐藏的所有行中的值,并在确实显示的行中显示总和

另外,我想从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
我想选择:

Place    #_of_Items
=======================
CA        7
NY        8
MA        1
只需要两列-基本上,位置是唯一的,但它会从隐藏行中获取所有_of_项的总和,并将它们添加到显示的每个状态的一行中

然后,如果可能,我还想选择description列中所有不同条目的组合,以便:

"towels, shirts, hats, shorts, pins, socks"
我希望这是有道理的


提前非常感谢大家

如果可以在数据库中创建用户定义的函数,请替换为表名:

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
然后,您可以在查询中使用它返回项目计数以及特定于该位置的项目列表,并替换为表名:

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

谢谢你的回复!我会和上面的一个一起试一试。