1

我是 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"

我需要做的是用 1903 替换 yr_left 1901 中的第一个值,但保留第一行的其余部分,然后将 1904 intp 放在第二个等等,并在 yr_left 的底行有一个空值。

截屏

是否有可能做到这一点,声明应该是什么样子?

4

2 回答 2

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
于 2013-05-11T00:35:43.253 回答
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
于 2013-05-11T00:59:40.660 回答