我只希望返回行,如果第一个条件不存在,那么从同一表返回新条件,以及附加条件:基本上:
SELECT *
FROM Table1
WHERE
Condition#1: Column1=Column2
Condition#2: AND IF Column1 = Column2 doesn't exist (matching values for same ID)
THEN return results where Column3 = Column4

谢谢。
发布于 2018-11-14 22:23:49
首先你需要检查你是哪一种情况。你数一数你的桌子上有多少C1 = C2
SELECT [id], COUNT(CASE WHEN C1 = C2 THEN 1 END) as c1_c2
FROM Table1
GROUP BY [id]那么你有两个条件
首先,当您有一些c1 = c2时,您会这样做。
(c1 = c2 and c1_c2 > 0 )第二个时间没有任何c1 = c2
(c1_c2 = 0 and c3 = c4)SQL演示::因为它是一个OR,c1_c2计数决定了where的哪一边要工作。
WITH c12 as (
SELECT [id], COUNT(CASE WHEN C1 = C2 THEN 1 END) as c1_c2_cnt
FROM Table1
GROUP BY [id]
)
SELECT *
FROM Table1 T
JOIN c12 C
ON T.[id] = C.[id]
WHERE ( C.c1_c2_cnt > 0 and T.c1 = T.c2 )
OR ( C.c1_c2_cnt = 0 and T.c3 = T.c4 )输出

发布于 2018-11-14 21:54:38
我怀疑这将适用于行动的目的,然而,逻辑似乎很奇怪.
SELECT {Columns}
FROM YourTable YT
WHERE YT.Column1 = YT.Column2
OR (YT.Column3 = YT.Column4
AND NOT EXISTS(SELECT 1
FROM YourTable e
WHERE YT.id = e.id
AND e.Column1 = e.Column2));不过,不确定性能会有多好,因为您很可能最终会使用该NOT EXISTS进行表扫描。
发布于 2018-11-14 21:54:46
好吧,根据这些评论,这里有一个方法。
SELECT *
FROM Table1
WHERE Column1 = Column2
UNION
SELECT *
FROM Table2
WHERE Column1 != Column2 and Column3 = Column4https://stackoverflow.com/questions/53309088
复制相似问题