2009-12-11 106 views
0

我有3個表:Customer,CustomerTypes,CustomerCustomerTypes。 CustomerCustomerTypes基本上是Customer和CustomerTypes之間的橋樑表。SQL 2005中的TSQL:查詢

表結構: 客戶: 客戶ID 客戶名稱

CustomerTypes: CustomerTypeID CusctomerTypeName

CustomerCustomerTypeID 的CustomerID CustomerTypeID

示例數據: 客戶:

1, ABC 
2, CBA 

CustomerTypes:

1, Broadcast 
2, Banking 
3, Retailer 

CustomerCustomerTypes:

1, 1 
2, 2 
2, 3 

我希望能夠返回查詢如下:

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

以及能夠來搜索字符串讓我們說「CustomerTypeID = 2」

將ruturned爲:

CustomerCustomerTypes; "Banking, Retailer" 

我能做到這一點用遊標類型的查詢,但我只是想知道,也許有更好的方法。

謝謝

回答

2

用途:

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 
+0

注意,FOR XML PATH是唯一支持2005+ – 2009-12-11 03:12:52

+0

感謝OMG小馬。我對你的代碼進行了修改,它應該在STUFF部分的SELECT之間有一個括號。再次感謝..我知道有比光標更好的方法。 – dcpartners 2009-12-11 03:28:37

+0

@dewacorp:對不起 - 更正。 – 2009-12-11 03:35:06

1

用於XML查詢的SQL Server會給你你想要的。我沒有機會檢查下面的內容,但它應該指向正確的方向。

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;