У меня есть следующее требование: с помощью предложения 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
.......
Но мне нужны такие результаты, как наборы sets , в которых есть 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-запросе?
4 ответа
Вы можете использовать запрос с 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
В приведенном выше запросе используется ROW_NUMBER
с предложением PARTITION BY
, чтобы перечислить записи с фрагментами одного и того же 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
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.