2015-01-20 100 views
0

我知道SQL Server Pivot,但是這次我想我需要更復雜的東西,然後是一個簡單的pivoted值。SQL Server:將行轉換爲一行

Here it is an SQL fiddle example.

所以我有一個表,我有最多3行一種startcity - endcity組合。

在查詢中,我需要在一行中獲得這些組合,而我只需要那些組合,其中有3行。

請指教,

+0

您是否擁有此表的PrimaryKey。你如何找到行之間的差異。 – adopilot 2015-01-20 22:05:56

+1

http://sqlfiddle.com/#!3/07d1d/26 – Mihai 2015-01-20 22:17:11

+0

我對於開始,結束城市和日期有複雜的PK。 – martonx 2015-01-20 22:21:33

回答

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