簡體   English   中英

通過變量獲取第一行號

[英]Get the first rownumber by variable

我有下面的代碼,我想拉表中的第一個rownu = 1 ,但是當我在where語句中編寫它時,我得到一個錯誤:

SELECT 
    * 
FROM 
    (SELECT  
         VID,
         SPRTELE_PHONE_NUMBER AS Phone,
         ROW_NUMBER() OVER (PARTITION BY VID ORDER BY SPRTELE_TELE_cODE desc) AS ROWNU         
     FROM 
         PERSONNEL_VIEW, SPRTELE 
     WHERE     
         SPRTELE_PIDM = PIDM   
         AND (SPRTELE_SEQNO = (SELECT MAX (SPRTELE_SEQNO)
                               FROM SPRTELE
                               WHERE SPRTELE_PIDM = PIDM)))
    ) DATA
WHERE 
    DATA.ROWNU = 1

UNION

SELECT
    *  
FROM
    (SELECT 
         VID,
         SPRTELE_PHONE_NUMBER AS Phone,
         '1' AS ROWNU
     FROM 
         STUDENT_VIEW, SPRTELE
     WHERE     
         SPRTELE_PIDM = PIDM  
         AND (SPRTELE_SEQNO = (SELECT MAX (SPRTELE_SEQNO)
                               FROM SPRTELE
                               WHERE SPRTELE_PIDM = PIDM))
         AND TERM_CODE = '201920'
    ) DATA
WHERE
    data.rownu = 1;

輸出是這樣的

VID           PHONE    ROWNU
-----------------------------
VI1003365     5891449     1
VI2380659     4932389     1
VI2997998     6371006     1 
VI2997998     5821347     2

我只需要拉出rownu=1 ,但是在代碼中放入“ rownu = 1”時出現錯誤。

您將需要為此創建一個子查詢:

SELECT * 
FROM (
  SELECT vid, 
   sprtele_phone_number                 AS Phone, 
   Row_number() 
     OVER ( 
       partition BY vid 
       ORDER BY sprtele_tele_code DESC) AS ROWNU 
   FROM   personnel_view, 
       sprtele 
   WHERE  sprtele_pidm = pidm 
       AND ( sprtele_seqno = (SELECT Max (sprtele_seqno) 
                              FROM   sprtele 
                              WHERE  sprtele_pidm = pidm) )
) DATA
WHERE DATA.ROWNU =1; 

您可以在這里閱讀原因: https : //www.sqltheater.com/blog/cant-use-row-number-where/

- 編輯 -

如果查詢變得更加復雜,則可以使用WITH子句,如下所示:

WITH UNION_DATA AS ( 
  SELECT  VID,
          SPRTELE_PHONE_NUMBER    AS Phone,
          ROW_NUMBER()
          OVER (
             PARTITION BY VID 
             ORDER BY SPRTELE_TELE_cODE desc)  AS ROWNU         
  FROM PERSONNEL_VIEW ,  SPRTELE 
  WHERE     SPRTELE_PIDM = PIDM   
        AND (SPRTELE_SEQNO =
            (SELECT MAX (SPRTELE_SEQNO)
               FROM SPRTELE
                  WHERE SPRTELE_PIDM = PIDM ))
  UNION
  SELECT VID,
      SPRTELE_PHONE_NUMBER    AS Phone,
      '1'  AS ROWNU
  FROM STUDENT_VIEW, SPRTELE
  WHERE     SPRTELE_PIDM = PIDM  
       AND (SPRTELE_SEQNO =
            (SELECT MAX (SPRTELE_SEQNO)
               FROM SPRTELE
              WHERE SPRTELE_PIDM = PIDM ))
       AND TERM_CODE = '201920')
SELECT *
FROM UNION_DATA UD 
WHERE UD.ROWNU = 1

閱讀有關WITH子句的更多信息: https : //docs.oracle.com/cd/E17952_01/mysql-8.0-zh/with.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM