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
我发现有几个问题与此有一点关系,但在这种情况下没有一个能满足我的所有需求。不幸的是,我还不够好 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