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