#sql-server #stored-procedures #sql
#sql-сервер #хранимые процедуры #sql
Вопрос:
У меня есть таблица с данными по имени Product
ProductID ProductName
1 ABC
2 PQR
3 XYZ
4 HJK
5 LKJ
6 MNB
... ....
в нем гораздо больше продуктов. Я хочу получить такой результат в запросе Select:
RowNo ProductID ProductName
1 1 ABC
1 2 PQR
2 3 XYZ
2 4 HJK
1 5 LKJ
1 6 MNB
2 7 klj
2 8 hjg
затем 1,1, 2,2 1,1 для количества записей в таблице. Возможно ли это, и если да, то как я могу это сделать?
Ответ №1:
Это работает для вашего примера данных, который предполагает, что ProductID является непрерывным:
SELECT
CASE WHEN ProductID % 4 = 0 OR (ProductID 1) % 4 = 0 THEN 2 ELSE 1 END,
ProductID,
ProductName
FROM
Product
Теперь, предполагая, что вы имеете в виду в resultset, который может иметь пробелы в ProductID
SELECT
CASE WHEN ContiguousProductID % 4 = 0 OR (ContiguousProductID 1) % 4 = 0 THEN 2 ELSE 1 END,
--ContiguousProductID,
--CASE WHEN ProductID % 4 = 0 OR (ProductID 1) % 4 = 0 THEN 2 ELSE 1 END,
ProductID,
ProductName
FROM
(
SELECT
ROW_NUMBER() OVER (ORDER BY ProductID) AS ContiguousProductID,
ProductName, ProductID
FROM
dbo.Product
) P2
Комментарии:
1. Благодаря @ gbn я получил результат при некотором редактировании одного и того же запроса, на самом деле я хочу применить 1 к первым двум строкам, затем 2 ко вторым двум, независимо от данных.