SQL Server:将行转换为一行

时间:2015-01-20 21:51:48

标签: sql-server pivot

我知道SQL Server Pivot,但这次我认为我需要的东西比简单的旋转值更复杂。

Here it is an SQL fiddle example.

所以我有一张表,其中一个startcity最多有3行 - endcity组合。

在查询中,我需要在一行中获得这些组合,我只需要那些有3行的组合。

请建议,

1 个答案:

答案 0 :(得分:1)

你可以像这样做一个交叉表。

with NumberedValues as
(
    SELECT EndCity
        , StartDate
        , EndDate
        , Price
        , ROW_NUMBER() OVER(PARTITION BY StartCity, EndCIty ORDER BY StartDate) as RowNum
    FROM [dbo].[BestPrice]
)
SELECT EndCity,
    max(CASE WHEN RowNum = 1 THEN StartDate END) as StartDate1,
    max(CASE WHEN RowNum = 1 THEN Enddate END) as EndDate1,
    max(CASE WHEN RowNum = 1 THEN Price END) as Price1,
    max(CASE WHEN RowNum = 2 THEN StartDate END) as StartDate2,
    max(CASE WHEN RowNum = 2 THEN Enddate END) as EndDate2,
    max(CASE WHEN RowNum = 2 THEN Price END) as Price2,
    max(CASE WHEN RowNum = 3 THEN StartDate END) as StartDate3,
    max(CASE WHEN RowNum = 3 THEN Enddate END) as EndDate3,
    max(CASE WHEN RowNum = 3 THEN Price END) as Price3
FROM NumberedValues
group by EndCity