SQL 服务器 2012 枢轴 Table
SQL Server 2012 Pivot Table
我需要创建一个在数据透视表中显示结果的查询 table。
我有一个 table 定期更新客户端构建状态更改
我们有 8 个构建阶段
- 115 块土地购买
- 116 个基金会
- 117 木材套件已竖立/墙板水平
- 118 防风防水
- 119 第一次修复和抹灰
- 120 最终装修
- 121 完成
- 122 人已兑换
这是我的查询
SELECT
s.ProjectStage, su.DateStageChanged, p.FK_ID As ID,
s.LongDesc AS BuildType, su.FK_StageID
FROM
[dbo].[tbl_StageUpdates] AS su
LEFT JOIN
[dbo].[tbl_Stage] AS s ON su.FK_StageID = s.id
LEFT JOIN
tbl_Projects AS p ON su.FK_ProjectID = p.PK_ProjectID
WHERE
s.LongDesc = 'New Build'
GROUP BY
p.FK_ID, s.ProjectStage, su.DateStageChanged, s.LongDesc, su.FK_StageID
ORDER BY
su.FK_StageID ASC
ID 是客户 ID,我希望查询显示如下信息:
可以吗?
如有任何帮助,我们将不胜感激
干杯
如果您只有 8 个阶段,您可以使用 CASE...WHEN 和 GROUP BY 来归档您的预期输出。我认为它比使用 PIVOT 函数更具可读性。此外,它是 T-SQL 并且更容易迁移到其他 DBMS。
SELECT
ID,
BuildType,
MAX(CASE FK_StageID WHEN 115 THEN DateStageChanged ELSE NULL END) AS [Land Purchased],
MAX(CASE FK_StageID WHEN 116 THEN DateStageChanged ELSE NULL END) AS [Foundations],
MAX(CASE FK_StageID WHEN 117 THEN DateStageChanged ELSE NULL END) AS [Timber Kit Erected / Wall Plate Level],
MAX(CASE FK_StageID WHEN 118 THEN DateStageChanged ELSE NULL END) AS [Wind & Water Tight],
MAX(CASE FK_StageID WHEN 119 THEN DateStageChanged ELSE NULL END) AS [1st Fix & Plastering],
MAX(CASE FK_StageID WHEN 120 THEN DateStageChanged ELSE NULL END) AS [Final Fit Out],
MAX(CASE FK_StageID WHEN 121 THEN DateStageChanged ELSE NULL END) AS [Completed],
MAX(CASE FK_StageID WHEN 122 THEN DateStageChanged ELSE NULL END) AS [Redeemed]
FROM
(
-- original query
SELECT
s.ProjectStage, su.DateStageChanged, p.FK_ID As ID,
s.LongDesc AS BuildType, su.FK_StageID
FROM
[dbo].[tbl_StageUpdates] AS su
LEFT JOIN
[dbo].[tbl_Stage] AS s ON su.FK_StageID = s.id
LEFT JOIN
tbl_Projects AS p ON su.FK_ProjectID = p.PK_ProjectID
WHERE
s.LongDesc = 'New Build'
GROUP BY
p.FK_ID, s.ProjectStage, su.DateStageChanged, s.LongDesc, su.FK_StageID
-- original query
) Data
GROUP BY
ID, BuildType
我需要创建一个在数据透视表中显示结果的查询 table。
我有一个 table 定期更新客户端构建状态更改
我们有 8 个构建阶段
- 115 块土地购买
- 116 个基金会
- 117 木材套件已竖立/墙板水平
- 118 防风防水
- 119 第一次修复和抹灰
- 120 最终装修
- 121 完成
- 122 人已兑换
这是我的查询
SELECT
s.ProjectStage, su.DateStageChanged, p.FK_ID As ID,
s.LongDesc AS BuildType, su.FK_StageID
FROM
[dbo].[tbl_StageUpdates] AS su
LEFT JOIN
[dbo].[tbl_Stage] AS s ON su.FK_StageID = s.id
LEFT JOIN
tbl_Projects AS p ON su.FK_ProjectID = p.PK_ProjectID
WHERE
s.LongDesc = 'New Build'
GROUP BY
p.FK_ID, s.ProjectStage, su.DateStageChanged, s.LongDesc, su.FK_StageID
ORDER BY
su.FK_StageID ASC
ID 是客户 ID,我希望查询显示如下信息:
可以吗?
如有任何帮助,我们将不胜感激
干杯
如果您只有 8 个阶段,您可以使用 CASE...WHEN 和 GROUP BY 来归档您的预期输出。我认为它比使用 PIVOT 函数更具可读性。此外,它是 T-SQL 并且更容易迁移到其他 DBMS。
SELECT
ID,
BuildType,
MAX(CASE FK_StageID WHEN 115 THEN DateStageChanged ELSE NULL END) AS [Land Purchased],
MAX(CASE FK_StageID WHEN 116 THEN DateStageChanged ELSE NULL END) AS [Foundations],
MAX(CASE FK_StageID WHEN 117 THEN DateStageChanged ELSE NULL END) AS [Timber Kit Erected / Wall Plate Level],
MAX(CASE FK_StageID WHEN 118 THEN DateStageChanged ELSE NULL END) AS [Wind & Water Tight],
MAX(CASE FK_StageID WHEN 119 THEN DateStageChanged ELSE NULL END) AS [1st Fix & Plastering],
MAX(CASE FK_StageID WHEN 120 THEN DateStageChanged ELSE NULL END) AS [Final Fit Out],
MAX(CASE FK_StageID WHEN 121 THEN DateStageChanged ELSE NULL END) AS [Completed],
MAX(CASE FK_StageID WHEN 122 THEN DateStageChanged ELSE NULL END) AS [Redeemed]
FROM
(
-- original query
SELECT
s.ProjectStage, su.DateStageChanged, p.FK_ID As ID,
s.LongDesc AS BuildType, su.FK_StageID
FROM
[dbo].[tbl_StageUpdates] AS su
LEFT JOIN
[dbo].[tbl_Stage] AS s ON su.FK_StageID = s.id
LEFT JOIN
tbl_Projects AS p ON su.FK_ProjectID = p.PK_ProjectID
WHERE
s.LongDesc = 'New Build'
GROUP BY
p.FK_ID, s.ProjectStage, su.DateStageChanged, s.LongDesc, su.FK_StageID
-- original query
) Data
GROUP BY
ID, BuildType