Bigquery/SQL 仅获取一列的值,并使其他列保持 NULL

Bigquery/SQL Gets value for one column only and keeps other column NULL

提问人:Crazy 提问时间:11/8/2023 更新时间:11/8/2023 访问量:57

问:

我得到了以下 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。

  1. 当 SSRCode 等于 'AB20'、'AB25'、'AB30' 或 'AB40' 时,首先映射具有相同 SegmentID 的baggage_info
  2. 如果没有 SSRCode 等于“AB20”、“AB25”、“AB30”或“AB40”,但显示“PB20”、“PB25”、“PB30”或“PB40”,则将baggage_info映射到具有相同 SegmentID 的最早 SSRCreatedUTC
  3. 如果不满足上述 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?谢谢!

mysql google-bigquery left-join

评论


答: 暂无答案