2013-10-10 30 views
0

我有兩個表 - table1和table2。兩者都包含兩列 - rollnum,名稱。現在我想從table1中選擇所有行,並從table2中隨機選擇5個行。我已經寫了這樣如何將兩個表與Orderby子句結合使用?

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

,但它顯示了一個錯誤ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.請幫助。我認爲這個錯誤在NEWID()。這裏rollnum是主鍵

+0

你爲什麼要在查詢中使用NEWID()? 您使用NEWID無效 – Appyks

+1

@Appyks不,它不是。 – podiluska

回答

1

問題是與托架的變量的函數。試試這個

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

如果你能有重複條目,你可能要考慮的union all代替union

+0

這很酷; @ARATHY爲什麼這不被標記爲回答? – Appyks

+0

@podiluska是的,它很酷!但你能解釋一下這個't'的目的嗎? thankyou – ARATHY

+1

't'..它只是一個別名。你可以使用select t.rollnum,t.name – Appyks

-1

嘗試這個..

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

NEWID()是一個值分配給聲明爲uniqueidentifier數據類型

+0

downvote?有人可以給我理由嗎? – Prashant16

+0

不做OP的要求? – podiluska

+0

@ Prashant16我試過這個。它不會產生任何錯誤。但是table2上的內容沒有被隨機化。 – ARATHY

相關問題