簡體   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