Isnull在哪里

时间:2016-03-10 22:27:42

标签: sql isnull

SQL Server:

我试图写这样的东西:

SELECT A.*, B.VALUE FROM A, B
      WHERE A.TYPE = B.TYPE
      AND B.VALUE = ISNULL(A.VALUE, '0000')

所以基本上,我想搜索B并找到TYPES匹配的位置,而Value字段是= A中的Value字段。如果找不到,我想搜索B' 0000'代替。

但它没有在B.VALUE =' 0000' 如果我删除了IsNull并且只是放了&00; 0000'它会带回行。

编辑: 这是一个例子:

SELECT * FROM #TEMP4 ORDER BY TYPE <BR/>
SELECT * FROM #TEMP5 ORDER BY TYPE

TEMP4:
TYPE ----- VALUE
A ----------- 1131
A ----------- 1111
A ----------- 0000
B ----------- 0000
B ----------- 1151
C ----------- 1121

TEMP5:
TYPE ----- VALUE
A ----------- 1131
B ----------- 1161

期望的结果集:
A ----------- 1131 ------- 1131
B ----------- 1161 ------- 0000

SELECT A.*, B.VALUE FROM #TEMP5 A, #TEMP4 B
    WHERE A.TYPE = B.TYPE
    AND B.VALUE = ISNULL(A.VALUE, '0000')

这只会带回来:
甲----------- 1131 ------- 1131

3 个答案:

答案 0 :(得分:2)

你所追求的是合并功能:

SELECT * FROM A
WHERE EXISTS 
  (SELECT 'X' FROM B WHERE A.TYPE = B.TYPE
      AND B.VALUE = COALESCE(A.VALUE, '0000'))

答案 1 :(得分:0)

您没有从B中选择任何内容,因此我认为您需要的逻辑是:

SELECT *
FROM A
WHERE EXISTS (SELECT 1
              FROM B
              WHERE A.TYPE = B.TYPE AND
                    (B.VALUE = A.VALUE OR B.VALUE = '0000')
             );

答案 2 :(得分:0)

此查询可以解决您的问题。它通过子查询选择匹配类型可用的最高值。

SELECT *
FROM
(
  SELECT 
    A.*, 
    (
      SELECT TOP 1 VALUE 
      FROM #TEMP4  
      WHERE 1=1
        AND TYPE = A.TYPE 
        AND VALUE IN (A.VALUE, '0000')
      ORDER BY VALUE DESC
    ) BVALUE
  FROM #TEMP5 A
) z 
WHERE BVALUE IS NOT NULL