2015-02-24 66 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