微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按子句的 SQL 查询组

如何解决按子句的 SQL 查询组

我遇到了 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

Live demo here

enter image description here

,

您需要一个相关的子查询。我建议将查询编写为:

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 举报,一经查实,本站将立刻删除。