【问题标题】:SQL Replace first value of column with second valueSQL用第二个值替换列的第一个值
【发布时间】:2013-05-05 17:46:19
【问题描述】:

我是 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 的底行有一个空值。

是否可以这样做,语句应该是什么样子?

【问题讨论】:

  • 欢迎来到 StackOverflow!您可以发布示例数据(为此编辑您的答案)和基于它的所需输出吗?您使用的是什么 RDBMS(MySql、SQL Server、Oracle...)?

标签: sql replace


【解决方案1】:

这可能有效,具体取决于您的数据库系统允许的语法:

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

【讨论】:

  • 您好,感谢您的帮助。我得到了我想要的结果。再次感谢
  • @user2371802 感谢接受他的回答。如果您想感谢其他人为帮助您所做的努力,请投票。如果您发现答案具有误导性,请投反对票。这就是 SO 的工作原理。 (嗯,简而言之:)
  • @user2371802 您还可以在这里获得一个帐户,以获得好问题或帮助编辑等的积分。这一切都有助于社区,并为我们所有人提供更好的资源。
【解决方案2】:

试试这个

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

【讨论】:

  • 这假定事工表中的行必须始终按时间顺序排列。我们不确定这是否总是一个安全的假设。但我打赌你能解决这个问题,嗯? ;-)
  • 观察力好伙伴。快照中的查询结果是有序的,所以它没有让我感到震惊。但就像你说的那样,这不是一个好的假设,所以我输入了ORDER BY。谢谢。
猜你喜欢
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
相关资源
最近更新 更多