Sql server 如何使用Orderby子句合并两个表?

Sql server 如何使用Orderby子句合并两个表?,sql-server,Sql Server,我有两张桌子——表一和表二。两者都包含两列-rollnum,name。现在我想从表1中选择所有行,从表2中随机选择5行。我是这样写的 select rollnum,name from table1 union (select top 5 rollnum,name from table2 order by NEWID()) 但如果语句包含UNION、INTERSECT或EXCEPT运算符,则它会显示一个错误选择列表中必须出现ORDER BY items。请帮助。我认为错误在NEWID()。这里

我有两张桌子——表一和表二。两者都包含两列-rollnum,name。现在我想从表1中选择所有行,从表2中随机选择5行。我是这样写的

select rollnum,name from table1 union (select top 5 rollnum,name from table2 order by NEWID()) 
但如果语句包含UNION、INTERSECT或EXCEPT运算符,则它会显示一个错误
选择列表中必须出现ORDER BY items。
请帮助。我认为错误在NEWID()。这里rollnum是主键

试试这个

SELECT  rollnum AS 'NewID' ,
        name
FROM    table1
UNION
SELECT TOP 5
       rollnum ,
       name
FROM    table2
ORDER BY NewID

NEWID()是一个函数,它为声明为uniqueidentifier数据类型的变量赋值。

问题在于括号。试试这个

 select rollnum,name from table1 
 union 
 select * from (select top 5 rollnum,name from table2 order by NEWID())  t

如果您可以有重复的条目,您可能需要考虑<代码>联合所有而不是<代码>联合< /COD> < /P>您为什么要在查询中使用NeWess()。你对NEWID的使用无效,不符合OP的要求吗?@Prashant16我已经试过了。它不会产生任何错误。但是表2的内容不是随机的。@Podyluska是的,很酷!!但是你能解释一下这个“t”的目的吗??谢谢你没有。。它只是一个别名。您也可以使用select t.rollnum和t.name