如何解决按子句的 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,'Delhi')
INSERT INTO @tab VALUES (56,'Address5','Cali')
INSERT INTO @tab VALUES (1253,'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,'') AS addid
FROM
@tab T
WHERE
T.Rid IN (56,1253)
GROUP BY
T.Address1
它以逗号方式向我显示了所有 Id,而我想在第一列中显示 Address
等 Id 1,2
,在第二列中显示 3,4
,即 Id应按 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,'') AS addid
FROM
@tab T
WHERE
T.Rid IN (56,1253)
GROUP BY
T.Address1
,
您需要一个相关的子查询。我建议将查询编写为:
Processing GTAG command: ["event","exception",{description: "Your card has expired.",fatal: false}]
注意事项:
- 子查询中不需要聚合。
- 不要在 SQL Server 中使用没有长度的
SELECT Address1,' + CONVERT(Varchar(MAX),Id) FROM tab TR WHERE TR.Address1 = T.Address1 FOR XML PATH('') ),'') AS addid FROM tab T WHERE T.Rid IN (56,1253) GROUP BY Address1
。长度因上下文而异,并且会引入难以调试的错误。 - 相关性子句根据地址将值与外部查询中的值联系起来。
- 尚不清楚 year 是否真的需要在子查询中过滤
varchar
。对于您的示例数据,没有必要。
Here 是一个 dbfiddle。
在更新的 SQL Server 版本中,您只需使用 T.Rid
-- 这样您就可以忘记这个 XML hack。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。