簡體   English   中英

SQL Pivot 在 varchar 列上

[英]SQL Pivot on varchar columns

我有一個看起來像這樣的結果集:

FlightCode  col2    Col3    SourceAirportCode
Flight007   NYC     SOURCE      64
Flight008   ORD     TARGET      87
Flight007   SEA     TARGET      NULL
Flight008   PHX     SOURCE      NULL

我試圖達到的最終結果是:

FlightCode  Source  Target  SourceAirportCode
Flight007   NYC     SEA     64
Fight008    PHX     ORD     87

這是 pivot 問題嗎? 我嘗試了一些旋轉但沒有運氣,或者我只是對 Pivot 了解不夠。這是

SQL 小提琴演示

使用架構和插入語句。 請指教。

假設航班代碼實際匹配,則使用條件聚合:

select flightcode,
       max(case when col3 = 'SOURCE' then col2 end) as source,
       max(case when col3 = 'TARGET' then col2 end) as target,
       max(SourceAirportCode) as SourceAirportCode
from t
group by flightcode;

您可以使用自聯接並將一個表視為源,將另一個表視為目標。

WITH flight(FlightCode,  col2,    Col3,    SourceAirportCode)
AS 
(
 SELECT 'Flight007','NYC','SOURCE',64   UNION
 SELECT 'Flight008','ORD','TARGET',87   UNION
 SELECT 'Flight007','SEA','TARGET',NULL UNION
 SELECT 'Flight008','PHX','SOURCE',NULL
)

SELECT f.FlightCode, s.col2 as 'SOURCE', t.col2 as 'TARGET',
       f.SourceAirportCode
FROM flight f
JOIN flight s ON s.Col3 = 'SOURCE' AND s.FlightCode = f.FlightCode
JOIN flight t ON t.Col3 = 'TARGET' AND t.FlightCode = f.FlightCode
WHERE f.SourceAirportCode IS NOT NULL


FlightCode  SOURCE  TARGET  SourceAirportCode
 Flight007  NYC      SEA    64
 Flight008  PHX      ORD    87

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM