SQL 对来自联接的列数据进行分组
SQL Group column data from joins
我在编写 SQL 查询方面需要一些帮助。
我有以下格式的数据来自通过连接多个 tables 返回的查询。
CustID Name AccNo Bank
------ ---- ----- -----
1 Varun 9848032919 CB
1 Varun 9998887771 COB
1 Varun 9988776655 CB
2 Lokesh 9876543210 COB
2 Lokesh 9282726252 CB
3 aaaa 9181716151 COB
我希望数据的格式如下所示,以便于加载到 Crystal 报告中。
CustID Name AccNo Bank
------ ---- ----- -----
1 Varun 9848032919,9998887771,9988776655 CB,COB,CB
2 Lokesh 9876543210,9282726252 COB,CB
3 aaaa 9181716151 COB
我查看了其他建议使用 STUFF、XML PATH() 的答案,但它们仅适用于数据来自一个 table 的情况。在我的场景中,数据是通过加入多个 tables.
来检索的
我可以知道如何根据需要按 CustID
分组并连接其他列中的数据吗?
非常感谢您的宝贵时间!!!
编辑:我正在寻找 SQL Server 2005 版本的答案
包装 select 使其看起来像一个简单的 table。您可以对结果应用逻辑。
喜欢
Select a.*
from (select t1.col1, t2.col2
from table1 t1
join table2 t2 on t1.f1=t2.c1) a
您可以将查询放在 CTE
中,然后像这样在 CTE
上应用 FOR XML PATH
:
;WITH CTE AS (
... your query here
)
SELECT C.CustID, MAX(Name),
STUFF((
SELECT ', ' + + CAST(AccNo AS VARCHAR(MAX))
FROM CTE
WHERE (CustID = C.CustID)
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
,1,2,'') AS AccNo,
STUFF((
SELECT ', ' + + CAST(Bank AS VARCHAR(MAX))
FROM CTE
WHERE (CustID = C.CustID)
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
,1,2,'') AS Bank
FROM CTE C
GROUP BY C.CustID
我在编写 SQL 查询方面需要一些帮助。
我有以下格式的数据来自通过连接多个 tables 返回的查询。
CustID Name AccNo Bank
------ ---- ----- -----
1 Varun 9848032919 CB
1 Varun 9998887771 COB
1 Varun 9988776655 CB
2 Lokesh 9876543210 COB
2 Lokesh 9282726252 CB
3 aaaa 9181716151 COB
我希望数据的格式如下所示,以便于加载到 Crystal 报告中。
CustID Name AccNo Bank
------ ---- ----- -----
1 Varun 9848032919,9998887771,9988776655 CB,COB,CB
2 Lokesh 9876543210,9282726252 COB,CB
3 aaaa 9181716151 COB
我查看了其他建议使用 STUFF、XML PATH() 的答案,但它们仅适用于数据来自一个 table 的情况。在我的场景中,数据是通过加入多个 tables.
来检索的我可以知道如何根据需要按 CustID
分组并连接其他列中的数据吗?
非常感谢您的宝贵时间!!!
编辑:我正在寻找 SQL Server 2005 版本的答案
包装 select 使其看起来像一个简单的 table。您可以对结果应用逻辑。 喜欢
Select a.*
from (select t1.col1, t2.col2
from table1 t1
join table2 t2 on t1.f1=t2.c1) a
您可以将查询放在 CTE
中,然后像这样在 CTE
上应用 FOR XML PATH
:
;WITH CTE AS (
... your query here
)
SELECT C.CustID, MAX(Name),
STUFF((
SELECT ', ' + + CAST(AccNo AS VARCHAR(MAX))
FROM CTE
WHERE (CustID = C.CustID)
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
,1,2,'') AS AccNo,
STUFF((
SELECT ', ' + + CAST(Bank AS VARCHAR(MAX))
FROM CTE
WHERE (CustID = C.CustID)
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
,1,2,'') AS Bank
FROM CTE C
GROUP BY C.CustID