数据透视表中的数据类型转换错误

时间:2015-02-24 08:02:11

标签: sql-server

我有一个存储公司职位和“要求”的数据库。即每个职位都需要经历建筑归纳等等。有一个程序允许用户查看/管理所有这些,但当然,有人想要为客户进行导出,而且当前设置无法实现,我想快速数据透视表可以完成工作。

我有以下表格;

---------------------------
|        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',可能是'Any'/'All')。

我已阅读,阅读和阅读,但我似乎永远无法理解他们的概念,所以这是我目前的尝试;

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%')));

1 个答案:

答案 0 :(得分: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