SQL 2005中的TSQL:查询
我有3个表:Customer、CustomerTypes、CustomerCustomerTypes。CustomerCustomerTypes基本上是客户和CustomerTypes之间的桥梁表 表结构: 客户: 客户编号 客户名称 客户类型: CustomerTypeID CusctomerTypeName CustomerCustomerTypeID 客户编号 CustomerTypeID 样本数据: 顾客: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
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。我对你的代码做了修改,它应该在“在内容中选择”部分之间有一个括号。再次感谢。。我知道有比光标更好的方法。