Sql 通过变量获取第一行编号
我有一个如下的代码,我想提取表中的第一个rownu=1,但是当我在where语句中写入它时,我得到一个错误:Sql 通过变量获取第一行编号,sql,Sql,我有一个如下的代码,我想提取表中的第一个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
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;
您可以在此处阅读原因:
-编辑-
如果查询变得更复杂,可以使用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子句的更多信息:如果我需要为此代码添加union,该怎么办。让我编辑我输入的代码。感谢您的快速响应。它为第二行提供了错误,其中以select开头?在名称后面缺少AS,其中UNION_数据为…-早在25年前,ANSI-92 SQL标准中就用正确的ANSI联接语法替换了老式的逗号分隔的表列表样式,并且不鼓励使用这种样式。现在仍然支持老式的逗号分隔联接。