Ich habe zwei Tabellen, für die ich eine Abfrage schreibe. Einige der Spalten können in einer der Tabellen gefunden werden, während einige der Spalten calucalted sind.Linke Join-Anweisung, die unerwartete Nullwerte für Zeilen/Spalten mit Daten zurückgibt
Aus Gründen der Klarheit werde ich meine Abfrage kopieren unter:
select field_a,
cast(field_b as int),
field_c,
field_d,
Year,
coalesce(cast(field_e as float),0) America_spend,
sum(cast(field_e as float), 0) as America_spend,
coalesce(cast(field_e as float)/ sum(cast(field_e as float)) over(partition by Year) as total_spend
from table_a
left join table_b on
table_a.flield_a = table_b.field_a1 and
table_a.flield_b = table_b.field_b1 and
table_a.Year = table_b.Year
group by field_a,
field_b,
Year
I Tabellen haben, die wie folgt aussehen
Tabelle ein:
|field_a|field_b|field_c|field_d|Year|field_f|field_g|field_h
|data | 1 | data | data |2014| data | data | data
|data | 1 | data | data |2014| null | data | data
|0 | 1 | data | data |2014| data | data | data
|data | 1 | data | data |2014| null | data | data
|0 | 1 | data | data |2014| data | data | data
Tabelle b:
|field_a1|field_b1|Year|field_c1|field_j
|null | 1 |2014| data | data
|data | 1 |2015| data | data
|null | 0 |2014| data | data
|data | 1 |2015| data | data
|null | 0 |2014| data | data
Das Problem, das ich ' m ist, dass einige der Werte in der Spalte "Gesamtausgaben" einen Wert von null erhalten. Die Gesamtausgaben werden pro Jahr berechnet und dieses Feld sollte niemals null sein. Ebenso enthält die Spalte "Jahr" in keiner der Tabellen einen Nullwert. Aber aus irgendeinem Grund, wenn ich die Abfrage ausführen, erhalte ich Ergebnisse, die einige der Zeilen in der Spalte Jahr mit einem Nullwert enthalten. Dies sollte niemals passieren. Die meisten Ergebnisse entsprechen dem, was ich erwarten würde, aber einige nicht.
Ich vermute, das hat etwas damit zu tun, dass einige der Zeilen in field_b null sind und auf 0 konvertiert werden, aber warum ist das wichtig?
Ich aktualisierte die Tabellen und die Abfragen, um die Struktur der Datenbank genauer widerzuspiegeln.
Ja, die Abfrage läuft und ich habe keine Namenskonflikte.
Wird diese Abfrage wirklich ausgeführt? – jarlh
@jarlh Die Abfrage wird ausgeführt, ich erhalte nur Ergebnisse, die ich nicht erwartet habe. –
Wenn Sie NULL haben, gibt der Join keine übereinstimmende Zeile zurück, da NULL <> NULL ist. Ich bin mir nicht sicher, warum du auf Floats wirfst. Sie sollten wahrscheinlich stattdessen einen numerischen Wert verwenden, da Floats ungefähr sind. Wie gebucht, würde diese Abfrage nicht ausgeführt, da nicht alle Spalten in der Gruppe enthalten oder aggregiert sind. –