2015-11-13 53 views
0

我有一个表“人脉”与动态交叉的记录数

EMPid ContactID EmergencyYN Priority 
--------------------------------------- 
10  20   Y   1 
10  39   N   1 
10  45   Y   2 
11  21   N   2 
12  20   Y   2 
12  25   Y   1 
12  33   Y   3 

我想什么是结果集是

EmpID EmergencyContact1 EmergencyContact2 EmergencyContact3 
------------------------------------------------------------------ 
10  20     45 
11   
12  25     20     33 

伪SQL是接近我可以得到:

So n = max number of contacts where EmergencyYN =Y per empID 
Then build a string for x = 1 to N 
    @sql = @sql + 'EmergencyContact'+x 
next 

有些古茹能帮我做这个吗?

+0

的可能的复制[SQL Server的动态PIVOT查询?](http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query) –

回答

0

我使用派生查询来创建不同EmpID的列表。然后,对于每个返回的ID,我将查询是否有匹配的紧急事件优先级。

SELECT 
    A.[EmpID] 
    ,(
     SELECT TOP 1 ContactID 
     FROM contacts B 
     WHERE B.EmpID=A.EmpID AND B.EmergencyYN='Y' AND B.[Priority]=1 
    ) AS [EmergencyContact1] 
    ,(
     SELECT TOP 1 ContactID 
     FROM contacts B 
     WHERE B.EmpID=A.EmpID AND B.EmergencyYN='Y' AND B.[Priority]=2 
    ) AS [EmergencyContact2] 
    ,(
     SELECT TOP 1 ContactID 
     FROM contacts B 
     WHERE B.EmpID=A.EmpID AND B.EmergencyYN='Y' AND B.[Priority]=3 
    ) AS [EmergencyContact3] 
FROM (
     SELECT DISTINCT EMPID 
     FROM contacts 
    ) AS A;