假设我为同一记录分配了两个不同的ID。例如
RecordID | ID1 | ID2 -------------------- 1 | X | A 2 | X | B 3 | Y | C 4 | Y | C 5 | Y | D 6 | Z | E 7 | Z | E
现在,我想获取将ID1
分配给相同值的记录,其中ID2
被分配给不同的值。
例如,我想得到:
1, X, A
2, X, B
这里ID1为它分配了X,其中ID2为它分配了A和B,两个不同的值。
是否可以在SQL或SQL服务器中编写将返回此类记录的查询?
答案 0 :(得分:1)
您需要使用子查询,其中,对于每一行,您在表格中查看是否有任何其他行符合与其相关的特定条件。
伪sql:
select
t1.id,
t1.variable,
t1.value
from
table t1
where
exists ( select 1
from t2
where t2.id != t1.id
and t2.variable == t1.variable
and t2.value != t1.value)
答案 1 :(得分:1)
如果这是SQL Server 2005 +:
WITH minmax AS (
SELECT
*,
minID2 = MIN(ID2) OVER (PARTITION BY ID1),
maxID2 = MAX(ID2) OVER (PARTITION BY ID1)
FROM atable
)
SELECT
RecordID,
ID1,
ID2
FROM minmax
WHERE minID2 <> maxID2
;
在minmax
CTE中,添加了另外两列,其中包含具有相同ID2
的每组行的最小和最大ID1
。主查询仅返回相应的最小ID2
与最大ID2
不匹配的行。