2013-10-07 24 views
0

我在SQL Server中的两个表2008 R2: 表“阶段:动态柱的数量和加入

Phases_ID Phases_Title 
------------------------ 
1   Phase1 
2   Phase2 
...   ... 

和表 “里程碑”

Milestones_ID Milestones_PhaseID Milestones_Category 
------------------------------------------------------ 
1    1     Project 
2    1     Project 
3    1     Customer 
...   ...     ... 

你可以看到这个是表格间的1:n关系。

现在我需要一个结果如下的查询:

Phases_ID Project  Customer (Columns 'Project' and 'Customer' counts milestones) 
--------------------------------- 
1   2   1    
2   0   3 
...   ...   ... 

是否有可能动态创建具有里程碑类别的列? 否则,我会做一个简单的左表连接,并在代码后面执行其余的操作,但性能将是最差的。

谢谢!

+0

DO [支点](http://technet.microsoft.com/en-us/library/ms177410%28v=sql.105% 29.aspx)的帮助? – geomagas

回答

0

是的! PIVOT救援:http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

尝试这样:

SELECT Phases_ID, Project, Customer 
FROM (
    SELECT Phases_ID, Milestones_PhaseID, Milestones_Category 
    FROM Phases INNER JOIN Milestones ON Phases_ID = Milestones_PhaseID 
) AS src 
PIVOT (
    COUNT(*) 
    FOR Milestones_Category IN ([Project], [Customer]) 
) AS pvt 
+0

谢谢!完美的例子。就是这样:-) –