2013-08-19 40 views
0

我在一個表[響應]中有逗號分隔的字段,我有另一個表,其中包含逗號分隔字段[suppliers]中可以存在的所有選項。來自另一個表的SQL查詢循環

所以這是一個創紀錄的列「供應商」在[迴應]表中的內容的一個示例:

Supplier A, Supplier B, Supplier C, Supplier D 

等。

我將最終希望能夠查看所有的答案降喜歡用他們的計數的列表:

  • 供應商C:16
  • 供應商B:14
  • 供應商d:8

我目前得到這些數字與笨重的手工子選擇未在佈局獲取數據我想,當我們有大約300家供應商

select 
    (select count(*) from dbo.responses) as TotalCount, 
    (select count(*) from dbo.responses where [suppliers] like '%Supplier C%') as [Supplier C], 
    (select count(*) from dbo.responses where [suppliers] like '%Supplier B%') as [Supplier B] 

我沒有在數據怎麼進來(逗號分隔場)總量控制和[供應]將是非常漫長的表是我手動建立了希望我能夠以某種方式循環這些項目並得到一個計數。

關於如何獲得此信息的任何想法都會導致供應商被選中的排序列表最多?

感謝


我覺得我很接近,但現在它只是計數記錄在「供應商」是唯一的答案選擇,並沒有清點任何被劃逗號的一部分列表,所以我覺得我在關於逗號的語法中有錯誤。

SELECT r.suppliers, COUNT(*) FROM responses AS r JOIN Suppliers s ON ','+CompanyName+',' LIKE '%,'+r.suppliers+',%' GROUP BY r.suppliers

+0

數據庫RESP是什麼樣的。您正在使用SQL方言嗎? – marderh

+2

看起來像MS SQL服務器 – Bruellhusten

+0

是的,這是在MS Sql服務器2003 – bmcnally

回答

3

如果你有所有可用的供應商的名單,你可以這樣做:

select ms.name, count(*) 
from responses r join 
    mastersuppliers s 
    on ','+ms.name+',' like '%,'+r.suppliers+',%' 
group by ms.name; 

順便說,需要做此強調你爲什麼不想存儲此類型用逗號分隔的列表中的數據。應該有一個單獨的關聯表。

有了更多的工作,如果沒有主列表,還可以使用遞歸CTE從列表中提取值。

編輯:

如果你沒有一個主列表,你可以試試CTE版本,這是一樣的東西:

with cte as (
     select left(r.suppliers, charindex(',', r.suppliers+',')) as suppliername, 
      substring(r.suppliers, charindex(',', r.suppliers+',') + 1, len(r.suppliers)) as rest, 
      1 as which 
     from responses 
     union all 
     select left(r.rest, charindex(',', r.rest+',')) as suppliername, 
      substring(r.rest, charindex(',', r.rest+',') + 1, len(r.rest)) as rest, 
      1 + level 
     from cte 
     where len(suppliername) > 0 
    ) 
select suppliername, count(*) 
from cte 
group by suppliername; 
+0

謝謝戈登,我覺得這是正確的路線。雖然我必須有一些聯繫錯誤。該查詢將執行,但我沒有得到任何結果。 (*) from dbo.Worksheet1 $ r join dbo.Sheet1 $ s on','+ CompanyName +','like'%,'+ r.suppliers +',%'供應商提供的 組; – bmcnally

+0

對不起,我是新來的堆棧,並試圖找出如何添加代碼片段來評論'SELECT r.suppliers,COUNT(*) FROM response AS r JOIN','+ CompanyName +','LIKE '%,'+ r.suppliers +',%' GROUP BY r.suppliers'這是正在運行,但僅在「供應商」是唯一答案的情況下才會回覆。句法的逗號是否正確? – bmcnally

+0

@bmcnally。 。 。問題可能是你的逗號分隔符而不是逗號。嘗試用逗號後面跟一個空格替換查詢中的逗號。 –