SQL 用于检查具有特定值的列是否在同一列中具有具有另一个特定值的对应行的查询
SQL query for checking whether a column with a specific value has its correspondent row with another specific value in the same column
我不太确定如何解决这个问题。
我的数据是这样的:
ENT ACC L_TYPE K_TYPE
0100 123 660 S
0100 123 673 S
然后我想看看L_TYPE 673和L_TYPE = 660有没有正确的对应关系
我想知道值为 673 的列 L_TYPE 是否也有对应的 660。
所有其他值都没有改变。
但是,我需要 SQL 尽可能通用。
我唯一能写的就是这个。因此,我能够发现 L_TYPE.
中至少有许多具有不同值的行
SELECT ENT, ACC, COUNT(*) FROM TABLE
WHERE K_TYPE = 'S'
GROUP BY ENT, ACC
HAVING COUNT(*)>1;
我考虑过使用游标,但我不太确定这是否能解决我的问题。
也许有人知道如何解决这个问题?
我使用DB2作为数据库。
要获取每个 ENT, ACC
组合的行,有 600 和 673 的 L_TYPE。
SELECT ENT, ACC, COUNT(*) FROM TABLE
WHERE K_TYPE = 'S' and l_type in (660,673)
GROUP BY ENT, ACC
HAVING COUNT(*)>1;
对于类型为 673 的所有行,查找具有匹配键且类型为 660 的行。
查找 673 没有对应的 660 的地方:
SELECT T1.*
FROM TABLE T1
LEFT JOIN TABLE T2
ON T2.ENT=T1.ENT
AND T2.ACC=T1.ACC
AND T2.K_TYPE = T1.K_TYPE
AND T2.L_TYPE = 660
WHERE T1.K_TYPE = 'S'
AND T1.L_TYPE = 673
AND T2.L_TYPE IS NULL
查找 673 与 660 对应的位置:
SELECT T1.*
FROM TABLE T1
JOIN TABLE T2
ON T2.ENT=T1.ENT
AND T2.ACC=T1.ACC
AND T2.K_TYPE = T1.K_TYPE
AND T2.L_TYPE = 660
WHERE T1.K_TYPE = 'S'
AND T1.L_TYPE = 673
我不太确定如何解决这个问题。
我的数据是这样的:
ENT ACC L_TYPE K_TYPE
0100 123 660 S
0100 123 673 S
然后我想看看L_TYPE 673和L_TYPE = 660有没有正确的对应关系
我想知道值为 673 的列 L_TYPE 是否也有对应的 660。 所有其他值都没有改变。
但是,我需要 SQL 尽可能通用。
我唯一能写的就是这个。因此,我能够发现 L_TYPE.
中至少有许多具有不同值的行SELECT ENT, ACC, COUNT(*) FROM TABLE
WHERE K_TYPE = 'S'
GROUP BY ENT, ACC
HAVING COUNT(*)>1;
我考虑过使用游标,但我不太确定这是否能解决我的问题。
也许有人知道如何解决这个问题? 我使用DB2作为数据库。
要获取每个 ENT, ACC
组合的行,有 600 和 673 的 L_TYPE。
SELECT ENT, ACC, COUNT(*) FROM TABLE
WHERE K_TYPE = 'S' and l_type in (660,673)
GROUP BY ENT, ACC
HAVING COUNT(*)>1;
对于类型为 673 的所有行,查找具有匹配键且类型为 660 的行。
查找 673 没有对应的 660 的地方:
SELECT T1.*
FROM TABLE T1
LEFT JOIN TABLE T2
ON T2.ENT=T1.ENT
AND T2.ACC=T1.ACC
AND T2.K_TYPE = T1.K_TYPE
AND T2.L_TYPE = 660
WHERE T1.K_TYPE = 'S'
AND T1.L_TYPE = 673
AND T2.L_TYPE IS NULL
查找 673 与 660 对应的位置:
SELECT T1.*
FROM TABLE T1
JOIN TABLE T2
ON T2.ENT=T1.ENT
AND T2.ACC=T1.ACC
AND T2.K_TYPE = T1.K_TYPE
AND T2.L_TYPE = 660
WHERE T1.K_TYPE = 'S'
AND T1.L_TYPE = 673