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非常感谢。。你是救命恩人!