gpt4 book ai didi

sql - 以逗号分隔的列的行列表,在其他列上分组

转载 作者:行者123 更新时间:2023-12-04 03:55:55 25 4
gpt4 key购买 nike

下面是我的表结构:-

T1

C1  C2  C3
----------
X P A
X P B
Y Q C
Y Q D

期望的输出:-

C1   C2   C3
------------
X P A,B
Y Q C,D

注意:- 我知道我可以用 For XML('') 对 C1 和 C2 进行分组,但我的主要问题是这里的表 T1 必须是数据库中的物理表对象(永久或临时或表 var 或 CTE)。但在我的例子中,它是一个派生表,当我使用下面的查询时,它说的是无效对象。在我的例子中,用 temp# 表或固定表甚至用 CTE 或表变量替换派生表都不好,因为这需要很大的努力。

SELECT 
b.C1, b.C2, Stuff((',' + a.C3 from t1 a where a.c1 = b.c1 for XML PATH('')),1,1,'') FROM
T1 b group by b.c1,b.c2

我没有将 T1 作为固定表。请仅将其视为派生表。

我需要现有派生表的解决方案。请帮忙。

下面是派生表的查询:-请仅将此视为演示查询。它并不像下面给出的那么简单,并且进行了大量计算以获得派生表并使用了 4 个级别的派生表。

SELECT C1, C2, Stuff((',' + a.C3 from A B where a.c1 = b.c1 for XML PATH('')),1,1,'')
FROM
(
SELECT C1, C2, C3 FROM T1 WHERE C1 IS NOT NULL--and a lot of calculation also
)A

请注意,T1 不只是低于一步,在我的例子中,T1 实际物理表是派生表的 4 级下降。

最佳答案

如果您可以发布生成派生表的查询,我们可以帮助您解决,但目前请尝试将 table1 替换为派生查询。

;WITH Table1
AS
(
SELECT C1, C2, C3 FROM T1 WHERE C1 IS NOT NULL--and a lot of calculation also
)
SELECT
C1,C2,
STUFF(
(SELECT ',' + C3
FROM Table1
WHERE C1 = a.C1 AND C2 = a.C2
FOR XML PATH (''))
, 1, 1, '') AS NamesList
FROM Table1 AS a
GROUP BY C1,C2

关于sql - 以逗号分隔的列的行列表,在其他列上分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14494975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com