将一列的10行复制到另一列中基于前10名的另一张表

时间:2019-04-07 17:17:28

标签: vb.net tsql

我对看似简单的代码有疑问。我有一个名为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尝试通过其他几种方式来做到这一点,但一直没有运气!我在做什么错了?

2 个答案:

答案 0 :(得分:3)

使用此查询:

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

答案 1 :(得分:0)

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

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()