Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL 2005中的TSQL:查询_Sql_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

SQL 2005中的TSQL:查询

SQL 2005中的TSQL:查询,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我有3个表:Customer、CustomerTypes、CustomerCustomerTypes。CustomerCustomerTypes基本上是客户和CustomerTypes之间的桥梁表 表结构: 客户: 客户编号 客户名称 客户类型: CustomerTypeID CusctomerTypeName CustomerCustomerTypeID 客户编号 CustomerTypeID 样本数据: 顾客: 1, ABC 2, CBA 客户类型: 1, Broadcast 2, Ban

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

表结构: 客户: 客户编号 客户名称

客户类型: CustomerTypeID CusctomerTypeName

CustomerCustomerTypeID 客户编号 CustomerTypeID

样本数据: 顾客:

1, ABC
2, CBA
客户类型:

1, Broadcast
2, Banking
3, Retailer
1, 1
2, 2
2, 3
客户类型:

1, Broadcast
2, Banking
3, Retailer
1, 1
2, 2
2, 3
我希望能够按如下方式返回查询:

ABC; "Broadcasting"
CustomerCustomerTypes; "Banking, Retailer"
以及能够搜索该字符串,比如说“CustomerTypeID=2”

它将改为:

CustomerCustomerTypes; "Banking, Retailer"
我可以用游标类型的查询来实现这一点,但我只是想知道是否有更好的方法


谢谢

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;

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;
使用:

要能够搜索特定的客户类型,请执行以下操作:

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
使用:

要能够搜索特定的客户类型,请执行以下操作:

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 Ponies。我对你的代码做了修改,它应该在“在内容中选择”部分之间有一个括号。再次感谢。。我知道有一种比游标更好的方法。请注意,FOR XML PATH仅支持2005+多亏了OMG Ponies。我对你的代码做了修改,它应该在“在内容中选择”部分之间有一个括号。再次感谢。。我知道有比光标更好的方法。