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