我有兩個表,我正在寫一個查詢。某些列可以在其中一個表中找到,而某些列可以被計算出來。左連接語句返回具有數據的行/列的意外的空值
爲了清楚起見,我會複製我的查詢如下:
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
我有這個樣子
表一表:
|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
表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
這個問題, m的含義是「總支出列」中的某些值被分配了空值。總支出每年計算一次,並且此字段不應爲空。同樣,年份列在任何一個表中都不包含空值。但由於某種原因,當我運行查詢時,我得到的結果中有一些年份列中的某些行的值爲空值。這絕不應該發生。大部分的結果都符合我的預期,但也有一些不符合我的預期。
我猜這與field_b中的某些行爲空並轉換爲0這一事實有關,但爲什麼這很重要?
我更新了表和查詢以更準確地反映數據庫的結構。
是的查詢運行,我沒有命名衝突。
該查詢是否真的執行? – jarlh
@jarlh查詢執行,我只是得到我沒有料到的結果。 –
那麼,當你有NULL連接將不會返回匹配的行,因爲NULL <> NULL。不知道你爲什麼要鑄造浮動。你應該使用數字來代替浮點數。發佈此查詢不會執行,因爲並非所有的列都在組中或聚合。 –