我有一个表1
Category Year Code Amount Unit
N 2014 1234 1000 8
N 2014 3456 2000 2
N 2014 8251 600 1037
R 2014 8251 800 1037
尺寸表DIM 1
Model_ID Year Code
1 2014 1234
2 2014 3456
3 2015 1234
4 2015 8251
期望结果:预期输出
Category Year Code Amount Unit
N 2014 1234 1000 8
N 2014 3456 2000 2
N 2014 8251 600 1037
R 2014 1234 0 8
R 2014 3456 0 2
R 2014 8251 800 1037
我想要输出如上所示。我尝试过使用左连接。通过左连接,我得到了' null' for Amount和unit.i使用nvl函数作为金额 即 nvl(金额,0)
SELECT *
FROM TABLE 1
LEFT JOIN Dim 1 TABLE 1 .year = dim 1 .year
AND TABLE 1.code = dim 1 .code
但金额和单位的价值行为不同。 如果金额没有价值那么它应该是' 0' 0 和单位价值应相同对于' N'和' R'师。请帮助我。谢谢你
答案 0 :(得分:0)
我认为您应该使用coalesce而不是NVL,因为NVL为字符串转换第二个表达式使用以下链接以获取更多信息。
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm http://www.w3schools.com/sql/sql_isnull.asp
使用以下代码
SELECT TABLE 1.Category, TABLE 1.Year,TABLE 1.Code, COALESCE(Amount,0),TABLE 1. Unit
FROM TABLE 1
LEFT JOIN Dim 1 TABLE 1 .year = dim 1 .year
AND TABLE 1.code = dim 1 .code
答案 1 :(得分:0)
NVL()很好。看起来你缺少加入条件 ' .. AND TABLE_1.Category = Dim_1.Category'
SELECT TABLE_1.Category, TABLE_1.Year,TABLE_1.Code, nvl((Amount,0),nvl(TABLE_1.Unit,0)
FROM TABLE_1
LEFT JOIN Dim_1
ON TABLE_1.year = Dim_1.year
AND TABLE_1.code = Dim_1.code
AND TABLE_1.Category = Dim_1.Category;