2013-02-16 149 views
-1

我會需要一個查詢,可以拉前100名記錄,其中50必須從一個名爲「名稱」,其中有一個值爲「房子」,並在同一列另一50價值記錄「飛機」。TOP記錄與子頂記錄sql

下面是它的樣表:

ID Item_Code Name Source 
1 987   House PG 
2 988   House TES 
3 989   Plane ASD 
4 990   House WAL 
5 991   Plane PG 
6 992   Plane TES 
+1

什麼是「前100條記錄」的意思,其含義是要排序,但你不指定什麼? (例如ID,Item_Code,Source,其他東西,或者你只是想每個50而不關心哪50個?) – 2013-02-16 20:44:02

+2

你使用Oracle或SQL Server嗎?如果您使用SQL服務器,請更正您的標記,或者如果您使用Oracle,請從我的答案中刪除接受,因爲它不適用於Oracle。 – 2013-02-16 22:07:35

回答

-7

您可以使用此:

SELECT TOP 50 * 
FROM sample_table 
WHERE Name = 'House' 
UNION ALL 
SELECT TOP 50 * 
FROM sample_table 
WHERE Name = 'Plane' 
+5

'TOP'無效Oracle語法 – 2013-02-16 20:10:22

+0

OK :)我錯過了標籤'Oracle'。但是如何降低贊成vs接受:) – 2013-02-16 21:58:51

4

您已經標記了甲骨文,但使用專用的T-SQL語法,不會在甲骨文工作,接受一個答案。假設您正在使用Oracle作爲標記,那麼你可以使用

SELECT "ID", 
     "Item_Code", 
     "Name", 
     "Source" 
FROM (SELECT YourTable.*, 
       ROW_NUMBER() OVER (PARTITION BY "Name" ORDER BY "Item_Code") rn 
     FROM YourTable 
     WHERE "Name" IN ('House', 'Plane')) 
WHERE rn <= 50; 

SQL Fiddle

+4

或者[這](http://www.sqlfiddle.com/#!4/74f7d/22)如果OP更喜歡使用'聯盟所有' – 2013-02-16 20:46:14

+0

@傑克杜格拉斯 - 謝謝! – 2013-02-16 20:49:07

+0

..或者如果他在一個非常非常古老的Oracle版本。 – 2013-02-16 21:12:05