加入不同的列函数

时间:2016-10-18 04:56:38

标签: sql oracle oracle11g

我有一个表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'师。请帮助我。谢谢你

2 个答案:

答案 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;