我是SQL查询的新手,我正在尝试选择以下列:
pm_name,party,yr_comm和yr_left。
我在前3列中有数据,为了创建yr_left,我给了yr_comm一个别名。
我尝试在SELECT语句中使用子查询来跳过yr_left中的第一个值,但是我得到一个错误,说子查询返回的行数超过1行:
SELECT pm_name, party, yr_comm,
(SELECT yr_comm FROM ministry WHERE yr_comm <> "1901") AS yr_left
FROM ministry
WHERE party <> "Labor"
我需要做的是将yr_left 1901中的第一个值替换为1903,但保留第一行的其余部分,并将1904 intp放入第二行等,并在yr_left的底行中使用空值。
是否可以这样做,声明应该是什么样的?
答案 0 :(得分:0)
试试这个
WITH mtable AS (
SELECT pm_name, party, yr_comm, rownum
FROM ministry WHERE party <> "Labor" ORDER BY yr_comm
) SELECT m.pm_name, m.party, m.yr_comm, (
SELECT mm.yr_comm FROM mtable mm WHERE mm.rownum = m.rownum + 1
) AS yr_left
FROM mtable m
答案 1 :(得分:0)
这可能有效,具体取决于数据库系统允许的语法:
SELECT m.pm_name, m.party, m.yr_comm,
(SELECT min(x.yr_comm)
FROM ministry as x
WHERE x.yr_comm > m.yr_comm
) as yr_left
FROM ministry as m
ORDER by m.yr_comm