回到这里,再问另一个问题!
因此,我们有两个数据透视表Table_A和Table_B。两个表都有相同的列。
我试图编写一个查询,该查询将遍历每一行并仅在具有相同ID的记录在“值”字段中具有值的情况下才返回true。 因此,例如,对于记录ID3,Table_A具有“ sdnbfsj”值,而对于同一记录ID,Table_B在“值”字段下具有值。
该查询应该能够验证两个表中的相同单元格是否具有值,如果有,则返回true。如果表总共只有三条记录,则返回true,但是请注意,记录ID 5在Table_A中有一个值,但记录ID 5在Table_B中为NULL。因此查询应返回false。
这是我到目前为止所拥有的:
SELECT source_column from
(
select source_column from Table_A WHERE Value_Inserted=1
EXCEPT
select source_column from Table_B WHERE Value_Inserted=1
)X
WHERE source_column IN
(
'Col_1'
,'COl_2'
,'Col_3'
,'Col_4'
)
答案 0 :(得分:0)
首先应该在id
上联接两个表,然后根据您的情况进行计数,这样就可以做到这一点。然后...返回“ true”或“ false”
SELECT CASE WHEN SUM(CASE WHEN t1.value IS NOT NULL AND t2.value IS NOT NULL THEN 1 ELSE 0 END) = Count(*) THEN 'True' ELSE 'False' END as test
FROM table_a as t1
INNER JOIN table_b as t2 ON
t1.id = t2.id
语法可能会有所不同,具体取决于您使用的RDBMS。
答案 1 :(得分:0)
我想你想要
select min(case when a.value is not null and a.value is null then 0
when a.value is null a and a.value is not null then 0
else 1
end) as flag
from a join
b
on a.class = b.class and a.source_col = b.source_col;
这会将1视为true,将0视为false。
答案 2 :(得分:0)
取决于您使用的 DBMS ;
对于 Oracle ,使用nvl2
函数:
select nvl2(a.value, 1, 0) * nvl2(b.value, 1, 0)
from Table_A a
inner join Table_B b
on (a.ID = b.ID);
对于 MSSQL ,可以使用convert
或cast
函数:
select convert(int, ( case when IsNull(a.value,'0') = '0' then '0'
else '1'
end ))
*
convert(int, ( case when IsNull(b.value,'0') = '0' then '0'
else '1'
end )) as result
from Table_A a
inner join Table_B b
on (a.ID = b.ID);
对于 MySQL ,使用IfNull
函数:
select ( case when IfNull(a.value,'0') = '0' then '0'
else '1'
end )
*
( case when IfNull(b.value,'0') = '0' then '0'
else '1'
end ) as result
from Table_A a
inner join Table_B b
on (a.ID = b.ID);
对于 PostGreSQL ,请使用coalesce
函数:
select cast( ( case when coalesce(a.value,'0') = '0' then '0'
else '1'
end ) as int )
*
cast( ( case when coalesce(b.value,'0') = '0' then '0'
else '1'
end ) as int ) as result
from Table_A a
inner join Table_B b
on (a.ID = b.ID);
所有这些都给出以下结果
result
0
0
1
0
0