2015-02-24 67 views
0

我有一個存儲我們公司的職位和「要求」的數據庫。即每個職位都需要經歷一次建築感應等等。有一個程序允許用戶看到/管理所有這些,但是當然,有人想要爲客戶端導出,而且當前的設置並不可行,我在想一個快速的數據透視表將會完成這項工作。數據透視表中的數據類型轉換錯誤

我有以下表格;

 
--------------------------- 
|  Positions  | 
--------------------------- 
| PositionID | int  | 
| PositionName | nvarchar | 
--------------------------- 

------------------------------ 
|  Requirements   | 
------------------------------ 
| RequirementID | int  | 
| RequirementName | nvarchar | 
| RequirementType | bit  | 
------------------------------ 

------------------------- 
| Position Requirements | 
------------------------- 
| Position_ID | int | 
| Requirement_ID | int | 
------------------------- 

我想這樣做是拉出數據特定位置位置,即SELECT * FROM Positions WHERE PositionName LIKE '%Manager%';
這些位置將形成透視的最左邊的列。
對於數據透視表的第一行,我想每個RequirementName
內部數據將爲RequirementType字段(即「0」或「1」,可能是「任何」/「全部」)。

我已經閱讀和閱讀,但我永遠不能看到我的頭腦圍繞他們的概念,所以這是我目前的嘗試;

SELECT * 
FROM Requirements 
PIVOT (MAX(RequirementType) FOR RequirementName IN ([Requirement], [Names], [Go], [Here])) AS pivtable 
WHERE [Requirement], [Names], [Go], [Here] IN (
    SELECT RequirementName FROM Requirements WHERE RequirementID IN (
     SELECT Requirement_ID FROM PositionRequirements WHERE Position_ID IN (
      SELECT PositionID FROM Positions WHERE PositionName LIKE '%Manager%'))); 
+0

不應該這個是'WHERE [要求],[名],[圍棋],[這裏] in..'只是'WHERE [要求] in..' – 2015-02-24 08:13:35

回答

1

您的PIVOT查詢未正確安排。試試這個:

SELECT * FROM 
(
SELECT 
     PositionName, 
     RequirementType, 
     RequirementName 
FROM [Position Requirements] A 
LEFT JOIN Positions B ON A.Position_ID=B.PositionID 
LEFT JOIN Requirements C ON A.Requirement_ID=C.RequirementID 
WHERE PositionName LIKE '%Manager%' 
) AS TABLE 
PIVOT(MAX(RequirementType) FOR RequirementName IN ([Requirement],[Names],[Go],[Here])AS pvt 
+0

輝煌!那就是我所追求的。現在,我認爲從迄今爲止我讀到的內容來看,我需要構建一些T-SQL來動態生成PIVOT的RequirementNames列表,對嗎? – Trent 2015-02-25 00:04:40