3

以下是我的表结构: -

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) D B。但在我的情况下,它是一个派生表,当我使用下面的查询时,它说的是无效对象。在我的情况下,用 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 级下降。

4

1 回答 1

3

如果您可以将查询发布到生成派生表,我们可以帮助您解决问题,但目前尝试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
于 2013-01-24T06:10:00.037 回答