子查询或 CTE 添加附加列
Subquery or CTE to add additional column
我有一个大型卡车票数据集,每张票生成两行输出。这是因为票证对于每张票证都有“出”和“入”组件。我想生成一行输出,但包括票证“出”部分和“入”部分的信息。
SELECT Ticket_number, Oil_volume,Faciliy_ID,Ticket_Type
FROM Truckticket T
JOIN TBATTERY TB
ON TB.Battery_ID = T.Battery_ID
我的输出有两行:
Ticket_number
Oil_volume
Facility_ID
Ticket_type
1
10
SK01
O
1
10
SK02
I
现在,当我在 Facility_ID
SK01
上使用 where 子句时,我希望我的输出是什么:
Ticket_number
Oil_volume
Facility_ID
Facility_ID
Ticket_type
1
10
SK01
SK02
O
我知道我必须使用子查询或 CTE 执行此操作才能在同一行上获得 Facility_ID
SK02
,但我被卡住了。我希望我第一次提出我的问题。谢谢!`
现在似乎是使用聚合和数据透视的好时机,而不是子查询或 CTE。对于少量静态类型,带有 GROUP BY
的简单 MAX(CASE...
表达式可以将行转换为列。
SELECT
Ticket_number,
MAX(CASE WHEN Ticket_Type = 'O' then Oil_volume else NULL END) Oil_volume_out,
MAX(CASE WHEN Ticket_Type = 'I' then Oil_volume else NULL END) Oil_volume_in,
MAX(CASE WHEN Ticket_Type = 'O' then Facility_ID else NULL END) Facility_ID_out,
MAX(CASE WHEN Ticket_Type = 'I' then Facility_ID else NULL END) Facility_ID_in,
FROM Truckticket T
JOIN TBATTERY TB
ON TB.Battery_ID = T.Battery_ID
GROUP BY Ticket_number;
我有一个大型卡车票数据集,每张票生成两行输出。这是因为票证对于每张票证都有“出”和“入”组件。我想生成一行输出,但包括票证“出”部分和“入”部分的信息。
SELECT Ticket_number, Oil_volume,Faciliy_ID,Ticket_Type
FROM Truckticket T
JOIN TBATTERY TB
ON TB.Battery_ID = T.Battery_ID
我的输出有两行:
Ticket_number | Oil_volume | Facility_ID | Ticket_type |
---|---|---|---|
1 | 10 | SK01 | O |
1 | 10 | SK02 | I |
现在,当我在 Facility_ID
SK01
上使用 where 子句时,我希望我的输出是什么:
Ticket_number | Oil_volume | Facility_ID | Facility_ID | Ticket_type |
---|---|---|---|---|
1 | 10 | SK01 | SK02 | O |
我知道我必须使用子查询或 CTE 执行此操作才能在同一行上获得 Facility_ID
SK02
,但我被卡住了。我希望我第一次提出我的问题。谢谢!`
现在似乎是使用聚合和数据透视的好时机,而不是子查询或 CTE。对于少量静态类型,带有 GROUP BY
的简单 MAX(CASE...
表达式可以将行转换为列。
SELECT
Ticket_number,
MAX(CASE WHEN Ticket_Type = 'O' then Oil_volume else NULL END) Oil_volume_out,
MAX(CASE WHEN Ticket_Type = 'I' then Oil_volume else NULL END) Oil_volume_in,
MAX(CASE WHEN Ticket_Type = 'O' then Facility_ID else NULL END) Facility_ID_out,
MAX(CASE WHEN Ticket_Type = 'I' then Facility_ID else NULL END) Facility_ID_in,
FROM Truckticket T
JOIN TBATTERY TB
ON TB.Battery_ID = T.Battery_ID
GROUP BY Ticket_number;