Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 以逗号分隔的列的行列表,其他列上有group by_Sql_Sql Server_Sql Server 2008_Sql Server 2005_Sql Server 2008 R2 - Fatal编程技术网

Sql 以逗号分隔的列的行列表,其他列上有group by

Sql 以逗号分隔的列的行列表,其他列上有group by,sql,sql-server,sql-server-2008,sql-server-2005,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008,Sql Server 2005,Sql Server 2008 R2,以下是我的表的结构:- 表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 注意:-我知道我可以对C1和C2上的GROUPBY对XML(“”)执行相同的,,但在我的例子中,主要的问题是这里的表T1必须是一个物理表对象(永久或临时或表var或CTE),单位为DB。但在我的例子中,它是一个派生

以下是我的表的结构:-

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
注意:-我知道我可以对C1和C2上的GROUPBY对XML(“”)执行相同的
,但在我的例子中,主要的问题是这里的表T1必须是一个物理表对象(永久或临时或表var或CTE),单位为DB。但在我的例子中,它是一个派生表,当我使用下面的查询时,它表示invalid object。 在我的例子中,用temp#tables或fixed tables甚至用CTE或table variable替换派生表是不好的,因为这需要很大的努力

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级。

如果您可以将查询发布到生成的派生表,我们可以帮助您解决此问题,但现在请尝试用派生查询替换
表1

;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

亲爱的@JW。我已经提到,我没有任何固定的表,这里的表1是一个派生表,因此无法在子查询中访问。请考虑这个约束来建议我。@GKRanjan为什么您认为派生表不可访问?尝试过帐生成派生表的查询。A
CTE
可以帮助您。您好@JW请重新检查原始问题。您好@HamletHakobyan谢谢您的回答,但为什么我不能对派生表执行相同操作。从优化的角度来看-CTE在Select语句中引用的次数与它在基表中的命中次数相同。因此,在上述情况下,它将被引用两次。还有什么方法可以让聚结功能达到同样的效果?请推荐我。谢谢。