【问题标题】:Copying 10 rows of one column to another table based on the Top 10 from a different column根据不同列的前 10 将一列的 10 行复制到另一个表
【发布时间】:2019-04-07 17:17:28
【问题描述】:

我对一段看似简单的代码有疑问。我有一个名为 Songs_DB 的表,其中包含一些歌曲的详细信息,包括一个名为 ELO 的列,它基本上是它们的排名。我希望根据 ELO 得分前 10 名的歌曲,将名为 SONG_ID 的列中的值转移到名为 Smartlist 的不同表中。

目前我想出的代码如下-

Dim Insert As New SqlCommand("INSERT INTO SMARTLIST (Song_ID) VALUES (SONG_ID) FROM SONGS_DB WHERE ELO IN (SELECT TOP 10 ELO FROM SONGS_DB ORDER BY ELO [ASC])", con)
    Insert.ExecuteNonQuery()

这将返回以下错误-

System.Data.SqlClient.SqlException: '关键字'FROM'附近的语法不正确。 关键字“ORDER”附近的语法不正确。'

IV 尝试通过其他几种方式做到这一点,但一直没有运气!我做错了什么?

【问题讨论】:

  • 你打算如何处理关系,例如如果有 7 首歌曲并列最高 ELO,然后 6 首歌曲并列第二高值怎么办?拿走所有 13 个?拿艺术家的Bacon Number订购的下一个领带的前7个,然后是前3个?如果这造成另一个平局怎么办?

标签: sql-server vb.net tsql


【解决方案1】:

使用这个查询:

INSERT INTO SMARTLIST (Song_ID) SELECT TOP 10 Song_ID FROM SONGS_DB ORDER BY ELO DESC

这将只插入 Song_ID 列。
如果你想要更多的列,你必须像这样包含它们:

INSERT INTO SMARTLIST (Song_ID, Column2) 
SELECT TOP 10 Song_ID, Column2 FROM SONGS_DB ORDER BY ELO DESC

我猜您希望将DESC 的行从较高的ELO 排序到较小的行。
如果不是这种情况,请删除 DESC

【讨论】:

    【解决方案2】:

    您可以使用以前的答案或更正您自己的代码:

    Dim Insert As New SqlCommand("INSERT INTO SMARTLIST (Song_ID) select SONG_ID FROM SONGS_DB WHERE ELO IN (SELECT TOP 10 ELO FROM SONGS_DB ORDER BY ELO [ASC])", con)
    Insert.ExecuteNonQuery()
    

    【讨论】:

      猜你喜欢
      • 2021-03-28
      • 1970-01-01
      • 2015-11-28
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 2023-03-17
      相关资源
      最近更新 更多