【发布时间】:2013-01-24 06:05:59
【问题描述】:
下面是我的表结构:-
表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 上使用 group by,但我的主要问题是这里的表 T1 必须是物理表对象(永久或临时或表 var 或 CTE)在 DB 中。但在我的情况下,它是一个派生表,当我使用下面的查询时,它说的是无效对象。
在我的情况下,用 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 级下降。
【问题讨论】:
标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2