Sql server SQL Server跨具有相等列的行选择并组合值
我发现有几个问题稍微涉及到这一点,但在这种情况下,没有什么能满足我的所有需要。不幸的是,我在SQL方面还不够好,无法将它们全部放在一起 基本上,我是从一个表中选择几行,我只想为一列选择具有不同值的行,但要组合从另一列隐藏的所有行中的值,并在确实显示的行中显示总和 另外,我想从1列中选择不同的值 以下是一个例子: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
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
谢谢你的回复!我会和上面的一个一起试一试。