GCP Bigquery 导致无法识别的名称和不明确的列

GCP Big Quetry is causing unrecognized name and ambious column

我对 SQL 有疑问,非常感谢您的帮助。 我有一个 SQL,这实际上很好用。 不幸的是,运行时会创建一个新列。这是自动创建的,称为“Material_1”。 这导致无法再调用普通列“Material”(“歧义名称错误”)。但是,如果我 select Material_1,我会得到另一个错误:“无法识别的名称”是指 Material 吗? 我非常强烈地认为排名与它有关,但我尝试将它从 >1 设置为 >=2 或类似的小调整没有成功。

WITH vdl_tracking_daten AS (
  SELECT 
    Trackingnummer,
    Transportdienstleister,
    LogisticsCustomCode,
    ActivityTimestamp,
    Versandtage AS Laufzeit_Arbeitstage,
    CASE WHEN LogisticsCustomCode='C4b' THEN True ELSE NULL END AS Ablieferhindernisse
  FROM 
    `VDL_Tracking_Tab`  
),

sap_sendungsdaten AS (
  SELECT *,
    SAFE_CAST(SUBSTRING(Warenausgangsdatum, 1, 10) as date) as Warenausgangsdatum_dateform,
    belegart.Belegart_Bezeichnung AS Fakturaart_Bez,
    vers.VersandartBezeichnung as Versandart_Bez
  FROM 
    `SP_TrackingKey_Tab` as track
  LEFT JOIN 
    `SP_Belegart` as belegart ON track.Fakturaart = belegart.Belegart_ID
  LEFT JOIN 
    `SP_Versandart` as vers ON vers.VersandartNr = track.Versandart
  where track.Faktura = '700238966'
),


gewicht_vdl_daten AS (
  SELECT DISTINCT 
    Trackingnummer,
    Gewicht AS Gewicht_aus_Rechnung
  FROM 
    `UP_Invoices`
    
  UNION ALL
  SELECT DISTINCT
    Trackingnummer,
    Gewicht AS Gewicht_aus_Rechnung
  FROM 
    `GL_Invoices`
  
  UNION ALL
  SELECT DISTINCT 
    Trackingnummer,
    Gewicht AS Gewicht_aus_Rechnung
  FROM 
    `BS_Invoices`
),

Empfaenger_PLZ AS (
  SELECT DISTINCT 
    f.Faktura AS Faktura_Key,
    f.Material,
    f.Land AS Land_Warenemfaenger,
    f.PLZ AS PLZ_Warenempfaenger,
  FROM 
    `SP_Faktura_Tab` f
  where f.Faktura = '700238966'
)

select * from (
  SELECT 
  sap.Trackingnr as Trackingnummer,
  sap.Faktura,
  sap.Fakturaart_Bez,
  sap.Vertriebsbeleg,
  sap.HandlingUnit,
  sap.Liefernr,
  sap.Material,
  sap.Versandart_Bez,
  sap.VersandartTyp,
  sap.Lagerort_Text as Lagerort,
  CAST(LEFT(sap.Warenausgangsdatum, 10) AS DATE) AS Warenausgangsdatum,
  PARSE_TIME('%H%M%S', REGEXP_REPLACE(sap.Warenausgangszeit, r'[^\d]+', '')) AS Warenausgangszeit,
  tracking.LogisticsCustomCode,
  tracking.ActivityTimestamp,
  CASE
    WHEN tracking.LogisticsCustomCode IN ('C4', 'C4a') THEN tracking.ActivityTimestamp
    ELSE NULL 
  END AS Zeitstempel_Zustellung,
  empf.* EXCEPT (Faktura_Key),

  row_number() OVER(PARTITION BY sap.TrackingNr, sap.Material ORDER BY sap.TrackingNr desc, sap.Material desc) as rank


  FROM 
    sap_sendungsdaten AS sap
  LEFT JOIN 
    vdl_tracking_daten AS tracking ON tracking.Trackingnummer = sap.Trackingnr
  LEFT JOIN 
    gewicht_vdl_daten AS gewicht ON gewicht.Trackingnummer = sap.Trackingnr
  LEFT JOIN 
    Empfaenger_PLZ  AS empf ON sap.Faktura = empf.Faktura_Key

)
where rank >= 2

empf.* EXCEPT (Faktura_Key) 这导致了错误。 f.Material AS empf_Material 解决了问题