2013-12-20 28 views
0

我不知道如何從以下查詢中選擇前8行。我對SQL很陌生。從隨機選擇中選擇前8行SQLSERVER

SELECT TOP 100 PERCENT * FROM (
select TEXT, ID, Details 
from tblTEXT 
where (ID = 12 or ID = 13 or ID =15) 

) X 
order by newid() 

此查詢給我31個隨機行,但我想選擇前8

我使用下列但它不工作

select top 8 
from 
(
SELECT TOP 100 PERCENT * FROM (
    select TEXT, ID, Details 
    from tblTEXT 
    where (ID = 12 or ID = 13 or ID =15) 

    ) X 
    order by newid() 
) 

回答

4

出了什麼問題只是:

SELECT TOP 8 * FROM (
select TEXT, ID, Details 
from tblTEXT 
where (ID = 12 or ID = 13 or ID =15) 

) X 
order by newid() 

(其他的答案是目前不正確,因爲他們不爲外子查詢指定一個名稱,但只有在最外面的查詢的ORDER BY會影響結果訂購無論如何,所以他們有其他的問題,當涉及到可靠性)

+0

謝謝:)是的,它解決了 – Kamran

1

試試這個

select top 8 * from 
(
SELECT TOP 100 PERCENT * FROM (
    select TEXT, ID, Details 
    from tblTEXT 
    where (ID = 12 or ID = 13 or ID =15) 

    ) X 
    order by newid() 
)Y 

當然,您從前100行中選擇前8位,您還可以直接從內部查詢中選擇前8位Ÿ通過更換top 100top 8這樣

SELECT TOP 8 * FROM (
select TEXT, ID, Details 
from tblTEXT 
where (ID = 12 or ID = 13 or ID =15) 

) X 
order by newid() 
+0

它給我錯誤在結束括號)。 False syntax near')' – Kamran

+1

是的,您需要命名外部子查詢以及內部子查詢(當前爲'X') –

+2

優化器在與「TOP 100 PERCENT」結合時可以忽略「ORDER BY」它知道所有結果都是必需的,因此它不必執行任何排序 –

-1

你需要指定你想從結果回來什麼: 的*意味着你想看到的everythin。

select top (8) * 
from 
(
SELECT TOP 100 PERCENT * FROM (
    select TEXT, ID, Details 
    from tblTEXT 
    where (ID = 12 or ID = 13 or ID =15) 

    ) X 
    order by newid() 
) 
+0

這不會以隨機順序返回行。 –

0

試試這個

SELECT TOP 8 * FROM 
(  
     SELECT TEXT, ID, Details 
     FROM tblTEXT 
     WHERE (ID = 12 or ID = 13 or ID =15) 
)X ORDER BY newid()