2013-01-11 107 views
-1

查詢我有以下結構和數據表:需要幫助建立與TSQL

ID_A | ID_B 
A  1 
A  2 
B  1 
B  2 
C  1 
C  3 
D  1 
D  2 
D  3 

我需要找到不同的集B的存在對於給出的ID。在這個例子中,結果將是:

  1. 1,2
  2. 1,3
  3. 1,2,3

如果我能拿到票也將是巨大的:

  1. 1,2- [2]
  2. 1,3 [1]
  3. 1, 2,3 [1]

我希望問題很明顯。謝謝!

+1

而且[你有什麼試過](http://whathaveyoutried.com)?你有一些你正在使用的SQL,它不工作?看,我們不在這裏爲你編寫你的軟件,我們在這裏互相幫助調試我們所困擾的事情。 –

+0

@MichaelPerrenoud:也許你不是在這裏爲別人寫軟件,但是在過去,我請求了這樣的幫助,而且我明白了。我不知道從哪裏開始查詢,所以我沒有嘗試任何東西,只是撓撓我的腦袋。以所有其他SO用戶的名義說話可能太多了...... –

+1

通過提問這樣的問題,您不遵守這個社區制定的規則和法規。請閱讀這裏(http://stackoverflow.com/questions/how-to-ask)。請注意**做你的作業**部分。 –

回答

3

SQL Fiddle

MS SQL Server 2012的架構設置

create table YourTable 
(
    ID_A char(1), 
    ID_B int 
) 

insert into YourTable values 
('A',  1), 
('A',  2), 
('B',  1), 
('B',  2), 
('C',  1), 
('C',  3), 
('D',  1), 
('D',  2), 
('D',  3) 

查詢1

select T.ID_B, 
     count(*) as C 
from 
    (
    select T1.ID_A, 
     (
     select ','+cast(T2.ID_B as varchar(10)) 
     from YourTable as T2 
     where T2.ID_A = T1.ID_A 
     order by T2.ID_B 
     for xml path(''), type 
     ).value('substring(text()[1], 2)', 'varchar(max)') as ID_B 
    from YourTable as T1 
    group by T1.ID_A 
) as T 
group by T.ID_B 

Results

| ID_B | C | 
------------- 
| 1,2 | 2 | 
| 1,2,3 | 1 | 
| 1,3 | 1 | 
+0

Whoao,太棒了!即使有兩種生活方式,我也無法結束這樣的事情:D非常感謝。 –