[英]SQL Query Group by Clause
我遇到了SQL
查詢的問題。 這是我的表結構:
DECLARE @tab TABLE
(
Id INT IDENTITY,
Rid INT,
Address1 VARCHAR(50),
City VARCHAR(20)
)
INSERT INTO @tab VALUES (56, 'Test1', 'New York')
INSERT INTO @tab VALUES (1253, 'Test1', 'Delhi')
INSERT INTO @tab VALUES (56, 'Address5', 'Cali')
INSERT INTO @tab VALUES (1253, 'Address5', 'Delhi')
SELECT * FROM @tab
我的查詢:
SELECT
Address1, STUFF((SELECT ',' + CONVERT(Varchar, Id)
FROM @tab TR
WHERE TR.Rid IN (56, 1253)
GROUP BY Id, Rid, Address1
FOR XML PATH('')), 1, 1, '') AS addid
FROM
@tab T
WHERE
T.Rid IN (56,1253)
GROUP BY
T.Address1
它以逗號方式向我顯示所有 Id,而我想以第一列中的1,2
和第二列中的3,4
之類的方式顯示 Ids Address
,即 Ids 應按 Address1 分組。
謝謝
您需要過濾TR.Address1
= T.Address1
而不是TR.Rid IN (56, 1253)
SELECT
Address1, STUFF((SELECT ',' + CONVERT(Varchar, Id)
FROM @tab TR
WHERE TR.Address1 = T.Address1 // Adjust the condition here
GROUP BY Id, Rid, Address1
FOR XML PATH('')), 1, 1, '') AS addid
FROM
@tab T
WHERE
T.Rid IN (56,1253)
GROUP BY
T.Address1
您需要一個相關的子查詢。 我建議將查詢編寫為:
SELECT Address1,
STUFF((SELECT ',' + CONVERT(Varchar(MAX), Id)
FROM tab TR
WHERE TR.Address1 = T.Address1
FOR XML PATH('')
), 1, 1, '') AS addid
FROM tab T
WHERE T.Rid IN (56, 1253)
GROUP BY Address1
筆記:
varchar
。 長度因上下文而異,並且會引入難以調試的錯誤。T.Rid
。 對於您的示例數據,沒有必要。這是一個 db<>fiddle。
在 SQL 服務器的更新版本中,您只需使用string_agg()
- 這樣您就可以忘記這個 XML hack。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.