繁体   English   中英

如何在同一个 SELECT 中使用 2 个不同的条件相互替代

[英]How to use 2 different condition substitute for each other in the same SELECT

我有这个问题现在,我有这张桌子

代码 第一没有 最后没有 日期输入
ABC1234 12 34 2022/06/06
ABCD5678 56 78 2022/07/07
ABCD9111 91 11 2022/07/07
DEF1234 12 34 2022/06/06
DEF5678 56 78 2022/07/07

然后,我想返回 2 个随机数(这 2 个数字是从 00 到 99),这将从前端获取。 让我们称它们为 Random1 和 Random2。 现在,当查询运行时,它将从记录 1 运行 --> 最终

如果每当FirstNo = Random1,那么下一条记录将采用FirstNo = Random2的条件。 然后,在下一条记录时,它会返回得到FirstNo = Random1的条件。

比如Random1 = 56,Random2 = 91,上表如上

第一条记录:FirstNo != 56,移动到下一行。

第二条记录:FirstNo = 56。

第三条记录:(因为在上一条记录中,FirstNo 等于 Random1 (56),所以这条记录会得到 Random2)FirstNo = 91。

第四条记录:回到Random1,......

所以,我正在想办法:

SELECT * FROM CODE_DEX WHERE FirstNo = @Random1
SELECT * FROM CODE_DEX WHERE FirstNo = @Random2

我不知道如何加入这两个。我可以创建一个列 ISTRUE 或其他东西来在 SQL 中声明和设置,但我认为我不能在 sql 查询中间使用 IF。

太感谢了

根据规定的要求

如果按日期排序的 FirstNo 的前一行值为 Random1,则为 FirstNo 返回 random2

你会在 SQL 中这样做

SELECT Code, 
       CASE WHEN LAG(FirstNo,1) OVER (ORDER BY Date_Input) = Random1 
            THEN Random2
            ELSE FirstNo END AS FirstNo,
       LastNo,
       Date_input
FROM sometableyoudidnotname
ORDER BY Date_input

   

您可以选择:

  • 下一个值,带有LEAD窗口函数
  • 以前的值,具有LAG窗口功能

然后过滤掉所有连续行中没有“ Random1 ”和“ Random2 ”值的行:

SET @Random1 = 56;
SET @Random2 = 91;

WITH cte AS (
       SELECT *,
              LAG(FirstNo)  OVER(ORDER BY Code, Date_input) AS PrevNo,
              LEAD(FirstNo) OVER(ORDER BY Code, Date_input) AS NextNo
       FROM tab
)
SELECT Code,
       FirstNo,
       LastNo,
       Date_input
FROM cte 
WHERE (FirstNo = @Random1 AND NextNo = @Random2)
   OR (FirstNo = @Random2 AND PrevNo = @Random1)

此处查看演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM