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 解决了问题
我对 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 解决了问题