首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Where子句Server中执行IF语句

在Where子句Server中执行IF语句
EN

Stack Overflow用户
提问于 2018-11-14 21:36:26
回答 5查看 97关注 0票数 0

我只希望返回行,如果第一个条件不存在,那么从同一表返回新条件,以及附加条件:基本上:

代码语言:javascript
复制
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

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-11-14 22:23:49

首先你需要检查你是哪一种情况。你数一数你的桌子上有多少C1 = C2

代码语言:javascript
复制
SELECT [id], COUNT(CASE WHEN C1 = C2 THEN 1 END) as c1_c2
FROM Table1
GROUP BY [id]

那么你有两个条件

首先,当您有一些c1 = c2时,您会这样做。

代码语言:javascript
复制
  (c1 = c2 and c1_c2 > 0 )

第二个时间没有任何c1 = c2

代码语言:javascript
复制
  (c1_c2 = 0 and c3 = c4)

SQL演示::因为它是一个OR,c1_c2计数决定了where的哪一边要工作。

代码语言:javascript
复制
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 )

输出

票数 0
EN

Stack Overflow用户

发布于 2018-11-14 21:54:38

我怀疑这将适用于行动的目的,然而,逻辑似乎很奇怪.

代码语言:javascript
复制
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进行表扫描。

票数 0
EN

Stack Overflow用户

发布于 2018-11-14 21:54:46

好吧,根据这些评论,这里有一个方法。

代码语言:javascript
复制
SELECT *    
FROM Table1      
WHERE Column1 = Column2 
UNION 
SELECT * 
FROM Table2 
WHERE  Column1 != Column2 and Column3 = Column4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53309088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档