[英]How to get SQL results as Different sets in SQL Query
我有以下要求:通過使用SQL IN
子句獲得前20個記錄。 我的疑問是
Select CatId,Name,Color
from Table1
where CatId in (10,11,12)
和結果是一樣的
CatId | Name | Color
------- -------- ------
10 Name1 Blue
10 Name2 red
10 Name3 Blue
11 Name4 Blue
10 Name5 red
12 Name6 Blue
11 Name7 Blue
12 Name8 Blue
.......
但我需要一個像台套 ,其在CatIds結果(10,11,12)
CatId | Name | Color
------- -------- ------
10 Name1 Blue
11 Name4 Blue
12 Name6 Blue
10 Name2 Red
11 Name7 red
12 Name8 Blue
......
在SQL查詢中有什么辦法可以告訴我嗎?
您可以使用ROW_NUMBER
的查詢:
Select CatId, Name, Color
from (
Select CatId, Name, Color,
row_number() over (partition by CatId order by Name) AS rn
from mytable
where CatId in (10,11,12)) as t
order by rn, Name
上面的查詢使用帶有PARTITION BY
子句的ROW_NUMBER
,以便枚舉具有相同CatId
切片的記錄。 因此,例如,具有CatId = 10
記錄被分配數字1, 2, 3, ...
,然后具有CatId = 11
記錄被類似地分配數字1, 2, 3, ...
因此不是。 使用這些數字,我們可以創建一個所需的訂單。
如果我明白,
試試這個(我假設CatId是數字):
Select CatId, Name, Color
from Table1 T
where CatId in (10,11,12)
order by CatId + CatId * ISNULL(
(SELECT COUNT(*) FROM Table1 T1
WHERE T.CatId = T1.CatId
AND T.Name > T1.Name), 0)
試試這個:
Select CatId,Name,Color
from Table1
where CatId in (10,11,12) order by Color, CatID
試試這個 :
SELECT ROW_NUMBER() OVER (PARTITION BY catId ORDER BY catId ) as rowNumber, * FROM Table1
WHERE catId in (10,11,12)
ORDER BY rowNumber
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.