【问题标题】:TSQL in SQL 2005: QuerySQL 2005 中的 TSQL:查询
【发布时间】:2023-03-27 02:28:01
【问题描述】:

我有 3 个表:Customer、CustomerTypes、CustomerCustomerTypes。 CustomerCustomerTypes 基本上是 Customer 和 CustomerTypes 之间的桥梁。

表结构: 顾客: 客户ID 客户名称

客户类型: 客户类型 ID 客户类型名称

客户客户类型ID 客户ID 客户类型ID

样本数据: 客户:

1, ABC
2, CBA

客户类型:

1, Broadcast
2, Banking
3, Retailer

客户客户类型:

1, 1
2, 2
2, 3

我希望能够返回如下查询:

ABC; "Broadcasting"
CustomerCustomerTypes; "Banking, Retailer"

以及能够搜索该字符串让我们说“CustomerTypeID = 2”

它会变成:

CustomerCustomerTypes; "Banking, Retailer"

我可以使用游标类型的查询来做到这一点,但我只是想知道也许有更好的方法。

谢谢

【问题讨论】:

    标签: sql sql-server sql-server-2005 tsql


    【解决方案1】:

    用途:

    SELECT c.customername,
           STUFF((SELECT ','+ ct.customertypename
                   FROM CUSTOMERTYPES ct
                   JOIN CUSTOMERCUSTOMERTYPES cct ON cct.customertypeid = ct.customertypeid
                  WHERE cct.customerid = C.customerid
               GROUP BY ct.customertypename
                FOR XML PATH('')), 1, 1, '')
     FROM CUSTOMERS c
    

    为了能够搜索特定的客户类型:

    SELECT c.customername,
           STUFF(SELECT ','+ ct.customertypename
                   FROM CUSTOMERTYPES ct
                   JOIN CUSTOMERCUSTOMERTYPES cct ON cct.customertypeid = ct.customertypeid
                  WHERE cct.customerid = C.customerid
               GROUP BY ct.customertypename
                FOR XML PATH(''), 1, 1, '')
     FROM CUSTOMERS c
     JOIN CUSTOMERCUSTOMERTYPES cct ON cct.customertypeid = ct.customertypeid
    WHERE cct.customertypeid = @customertypeid
    

    【讨论】:

    • 请注意 FOR XML PATH 仅支持 2005+
    • 感谢 OMG 小马。我对您的代码进行了修订,它应该在 STUFF 部分的 SELECT 之间有一个括号。再次感谢.. 我知道有比光标更好的方法。
    【解决方案2】:

    SQL Server FOR XML 查询将为您提供所需的内容。我没有机会检查以下内容,但它应该会为您指明正确的方向。

    SELECT c1.CustomerTypeId,
           ( SELECT CustomerTypeName + ',' 
               FROM CustomerTypes c2
              WHERE c2.CustomerTypeId = c1.CustomerTypeIdId
              ORDER BY CustomerTypeName
                FOR XML PATH('') ) AS CustomerTypess
          FROM CustomerCustomerTypes c1
          GROUP BY CustomerTypeId;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多