提问人:Crazy 提问时间:11/8/2023 更新时间:11/8/2023 访问量:57
Bigquery/SQL 仅获取一列的值,并使其他列保持 NULL
Bigquery/SQL Gets value for one column only and keeps other column NULL
问:
我得到了以下 2 个表格:
第1桌,Segment_info
预订 ID | 分段 ID | 乘客 ID | SSRCode | SSRCreatedUTC |
---|---|---|---|---|
123 | 371 | 251 | WCI(英语:WCI) | 2023-04-07 00:53:00.407000 UTC |
123 | 371 | 251 | MCI系列 | 2023-04-07 03:20:07.547000 UTC |
123 | 371 | 251 | PB20型 | 2023-04-07 00:52:19.107000 UTC |
123 | 371 | 251 | AB20型 | 2023-04-08 06:58:54.950000 UTC |
第二张桌子,Baggage_info
记录定位器 | 预订 ID | 分段 ID | 乘客 ID | 行李识别 | 重量 |
---|---|---|---|---|---|
美国广播公司 | 123 | 371 | 251 | 621 | 1 |
美国广播公司 | 123 | 371 | 251 | 154 | 18 |
美国广播公司 | 123 | 371 | 251 | 622 | 20 |
我想根据以下规则将Baggage_Info映射到 Segment_info。
- 当 SSRCode 等于 'AB20'、'AB25'、'AB30' 或 'AB40' 时,首先映射具有相同 SegmentID 的baggage_info
- 如果没有 SSRCode 等于“AB20”、“AB25”、“AB30”或“AB40”,但显示“PB20”、“PB25”、“PB30”或“PB40”,则将baggage_info映射到具有相同 SegmentID 的最早 SSRCreatedUTC
- 如果不满足上述 2 个条件,并且 SSRCode 等于“WCI”或“MCI”,则将baggage_info映射到具有相同 SegmentID 的最早 SSRCreatedUTC
因此,我写了以下查询:
WITH
segment_info AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY SegmentID ORDER BY
CASE WHEN SSRCode IN ('AB20', 'AB25', 'AB30', 'AB40') THEN 1
WHEN SSRCode = 'PB40' THEN 2
WHEN SSRCode = 'PB30' THEN 3
WHEN SSRCode = 'PB25' THEN 4
WHEN SSRCode = 'PB20' THEN 5
WHEN SSRCode IN ('WCI', 'MCI') THEN 6
ELSE 7 END,
SSRCreatedUTC ASC
) AS rn
FROM
`Segment_Info`
),
combined_segment_baggage AS (SELECT
BI.RecordLocator,
SI.BookingID,
SI.SegmentID,
SI.PassengerID,
BI.BaggageID,
BI.Weight AS BaggageWeight,
SI.SSRCode,
SI.SSRCreatedUTC
FROM
segment_info SI
LEFT JOIN
`dml-prod.ADS_GOP_SNT.Baggage_Info` BI ON SI.SegmentID = BI.SegmentID AND SI.rn = 1)
从上面的查询中,查询结果将如下所示
记录定位器 | 预订 ID | 分段 ID | 乘客 ID | 行李识别 | 行李重量 | SSRCode | SSRCreatedUTC |
---|---|---|---|---|---|---|---|
零 | 123 | 371 | 251 | 零 | 零 | WCI(英语:WCI) | 2023-04-07 00:53:00.407000 UTC |
零 | 123 | 371 | 251 | 零 | 零 | MCI系列 | 2023-04-07 03:20:07.547000 UTC |
零 | 123 | 371 | 251 | 零 | 零 | PB20型 | 2023-04-07 00:52:19.107000 UTC |
美国广播公司 | 123 | 371 | 251 | 621 | 1 | AB20型 | 2023-04-08 06:58:54.950000 UTC |
美国广播公司 | 123 | 371 | 251 | 154 | 18 | AB20型 | 2023-04-08 06:58:54.950000 UTC |
美国广播公司 | 123 | 371 | 251 | 622 | 20 | AB20型 | 2023-04-08 06:58:54.950000 UTC |
但是,我希望数据的每一行都包含相关的 RecordLocator 和其他列保持在 NULL 中
预期结果:
记录定位器 | 预订 ID | 分段 ID | 乘客 ID | 行李识别 | 行李重量 | SSRCode | SSRCreatedUTC |
---|---|---|---|---|---|---|---|
美国广播公司 | 123 | 371 | 251 | 零 | 零 | WCI(英语:WCI) | 2023-04-07 00:53:00.407000 UTC |
美国广播公司 | 123 | 371 | 251 | 零 | 零 | MCI系列 | 2023-04-07 03:20:07.547000 UTC |
美国广播公司 | 123 | 371 | 251 | 零 | 零 | PB20型 | 2023-04-07 00:52:19.107000 UTC |
美国广播公司 | 123 | 371 | 251 | 621 | 1 | AB20型 | 2023-04-08 06:58:54.950000 UTC |
美国广播公司 | 123 | 371 | 251 | 154 | 18 | AB20型 | 2023-04-08 06:58:54.950000 UTC |
美国广播公司 | 123 | 371 | 251 | 622 | 20 | AB20型 | 2023-04-08 06:58:54.950000 UTC |
谁能帮忙生成所需的Bigquery?谢谢!
答: 暂无答案
评论