2016-06-24 40 views
0

我有2個表Employee and Skills具有以下字段:SQL查詢來獲得單值組合多個ID,通過逗號分隔

員工Id,Name,Location

技能Id,Skills

Employee數據

Id Name Location 
7  Abc  London 
8  Xyz  London 
9  Xyz  USA 
10 Abc  USA 

技能

Id skills  EmployeeId 
12 AAA Xyz  7 
13 BBB   7 
14 CCC   7 
15 AAA   8 
16 BBB   8 
17 CCC   8 
18 AAA   9 
19 BBB   9 
20 CCC   9 
21 AAA   10 
22 BBB   10 
20 CCC   10 

現在我想技能的僱員的Name is AbcLocation is London and Skills is both AAA and BBB只有,但我想單輸出象下面這樣:

Skills 
10,11 

這是我的查詢:

select S.Id from Employee E inner join 
Skills S on E.Id=s.EmployeeId 
where (E.Name='Abc' and E.Location='London' 
and s.skills='AAA') and (E.Name='Abc' and E.Location='London' 
and s.skills='BBB') 

但輸出錯誤。

任何人都可以幫助我嗎?

+1

可能的重複[如何將多行組合成以逗號分隔的SQL Server 2005列表?](http://stackoverflow.com/questions/180032/how-can-i-combine-multiple-rows- into-a-comma-delimited-list-in-sql-server-2005) – JamieD77

回答

1

您可以使用STUFF這個:

Select Stuff 
(
    (
     Select ',' + Convert(Varchar, S.Id) 
     From Employee E 
     Join Skills  S On S.EmployeeId = E.Id 
     Where E.Name = 'Abc' 
     And  E.Location = 'London' 
     And  S.Skills In ('AAA', 'BBB') 
     For Xml Path ('') 
    ), 1, 1, '' 
) As Skills 

編輯:SQL小提琴似乎不想在此刻和我一起工作,但使用下面的數據(從OP),它得到的正確的結果:

Create Table Skills 
(
    Id int, 
    skills varchar (3), 
    employeeid int 
); 

Create Table Employee 
(
    Id int, 
    Name varchar (10), 
    location varchar (10) 
); 

insert skills values 
(10 ,'AAA',  1), 
(11 ,'BBB',  1), 
(13 ,'CCC',  1), 
(14 ,'DDD',  1); 

insert employee values 
( 1  ,'Abc' , 'London'), 
( 2  ,'Xyz',  'Uk'); 


Select Stuff 
(
    (
     Select ',' + Convert(Varchar, S.Id) 
     From Employee E 
     Join Skills  S On S.EmployeeId = E.Id 
     Where E.Name = 'Abc' 
     And  E.Location = 'London' 
     And  S.Skills In ('AAA', 'BBB') 
     For Xml Path ('') 
    ), 1, 1, '' 
) As Skills 

Results

編輯#2新數據;相同的查詢:

Create Table Skills 
(
    Id int, 
    skills varchar (3), 
    employeeid int 
); 

Create Table Employee 
(
    Id int, 
    Name varchar (10), 
    location varchar (10) 
); 

insert skills values 
(12 ,'AAA',  7 ), 
(13 ,'BBB',  7 ), 
(14 ,'CCC',  7 ), 
(15 ,'AAA',  8 ), 
(16 ,'BBB',  8 ), 
(17 ,'CCC',  8 ), 
(18 ,'AAA',  9 ), 
(19 ,'BBB',  9 ), 
(20 ,'CCC',  9 ), 
(21 ,'AAA',  10 ), 
(22 ,'BBB',  10 ), 
(20 ,'CCC',  10 ); 

insert employee values 
(7  ,'Abc',  'London' ), 
(8  ,'Xyz',  'London' ), 
(9  ,'Xyz',  'USA'  ), 
(10 ,'Abc',  'USA'  ); 


Select Stuff 
(
    (
     Select ',' + Convert(Varchar, S.Id) 
     From Employee E 
     Join Skills  S On S.EmployeeId = E.Id 
     Where E.Name = 'Abc' 
     And  E.Location = 'London' 
     And  S.Skills In ('AAA', 'BBB') 
     For Xml Path ('') 
    ), 1, 1, '' 
) As Skills 

Results #2

,結果這次是12,13 - 根據您的條件,這是正確的:

員工7是唯一一個與AbcLondon,並1213是技能AAABBB

+0

錯誤輸出 –

+1

錯誤怎麼回事?它是什麼顯示?我需要多一點繼續... – Siyual

+1

我會發佈一個SQL小提琴,但它現在不想和我一起工作。但是使用您的示例數據,我可以得到您要求的*確切*結果。 – Siyual