SQL Server 2012数据透视表
我需要创建一个在透视表中显示结果的查询 我有一个表,它会随着客户端构建状态的更改而定期更新 我们有8个阶段的建设SQL Server 2012数据透视表,sql,sql-server-2012,pivot,Sql,Sql Server 2012,Pivot,我需要创建一个在透视表中显示结果的查询 我有一个表,它会随着客户端构建状态的更改而定期更新 我们有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 FRO
- 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
嗨,楚,谢谢你抽出时间来帮助我。我使用了您建议的代码,但是没有一个ProtectStage填充了日期,我只得到空值。布局很完美,不知道为什么没有填充日期。@RustyHamster ProjectStage列的数据类型是什么?它是数字数据类型还是字符数据类型?您好,这是INT数据类型。当语句与INT数据类型比较时,您能否尝试更新CASE?我不确定我是否理解您希望我尝试的内容。我是否要将Projectstage从int转换为date?