Tsql 基于表中两列的透视
我有一张这样的桌子Tsql 基于表中两列的透视,tsql,sql-server-2012,Tsql,Sql Server 2012,我有一张这样的桌子 PCode Milestone DeliveryDate Status ------------------------------------------------------ P1234 Start 14/5/2019 Complete P1234 End 17/6/2019 Complete P2345 Start
PCode Milestone DeliveryDate Status
------------------------------------------------------
P1234 Start 14/5/2019 Complete
P1234 End 17/6/2019 Complete
P2345 Start 8/6/2019 Progress
P2345 End 19/6/2019 Progress
P7335 Start 18/8/2019 Provisional
P7335 End 19/9/2019 Provisional
-----------------------------------------------------------
PCode Start End Status
---------------------------------------------
P1234 14/05/2019 17/06/2019 Completed
P2345 8/6/2019 19/06/2019 Progress
P7335 18/08/2019 19/09/2019 Provisional
----------------------------------------------
根据以上数据,我需要得到一个这样的表格
PCode Milestone DeliveryDate Status
------------------------------------------------------
P1234 Start 14/5/2019 Complete
P1234 End 17/6/2019 Complete
P2345 Start 8/6/2019 Progress
P2345 End 19/6/2019 Progress
P7335 Start 18/8/2019 Provisional
P7335 End 19/9/2019 Provisional
-----------------------------------------------------------
PCode Start End Status
---------------------------------------------
P1234 14/05/2019 17/06/2019 Completed
P2345 8/6/2019 19/06/2019 Progress
P7335 18/08/2019 19/09/2019 Provisional
----------------------------------------------
我不知道如何使用一些PIVOT来实现这一点,一个简单的条件聚合应该可以做到这一点 这假设
[Status]
在PCode
记录中是一致的
Selet PCode
,[Start] = min(case when Milestone='Start' then DeliveryDate end)
,[Ebd] = max(case when Milestone='End' then DeliveryDate end)
,[Status] = max([Status])
From YourTable
Group By PCode
编辑-查找开始和结束状态
对于给定的一对记录,
状态
文件是否可能不一致,如果是,选择报告哪一个值的逻辑是什么?在我看来,这就像是条件聚合。到目前为止,您尝试了什么来解决这个问题?@TimBiegeleisen这并没有转换成行,因为我们没有制作具有不同开始和结束日期的列。它针对所有行创建一列,包含起始值和结束值。太棒了!对不起,我从来没有这样想过。。。。。干杯@桑迪斯托马斯总是乐于帮助,如果它回答了问题,“桑迪托马斯,请考虑将它标记为解决方案。”answer@JohnCappelletti非常感谢。。你是救命恩人!