簡體   English   中英

如何在SQL查詢中將SQL結果作為不同的集合獲取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM