Замена значений в таблице sql - PullRequest
0 голосов
/ 09 февраля 2011
OrderID, OrderTime, OrderItem

1,       1 am,      Orange
1,       2 am,      Apple
2,       3 am,      Grape
3,       2 am,      Apple
3,       3 am,      Coconut
1,       5 am,      Banana
1,       6 am,      Apple

Выше приведена исходная таблица.Ниже таблица, которую я хочу.если идентификатор заказа для одного и того же непрерывно, я хочу изменить время заказа на минимальное время.

OrderID, OrderTime, OrderItem

1,       1 am,      Orange
1,       1 am,      Apple
2,       3 am,      Grape
3,       2 am,      Apple
3,       2 am,      Coconut
1,       5 am,      Banana
1,       5 am,      Apple

1 Ответ

0 голосов
/ 09 февраля 2011

Нет никакого «естественного» порядка для ваших данных в SQL Server, если вы не укажете порядок, то порядок, который вы получите, никоим образом не гарантирован.Вам нужен столбец, который вы можете использовать для определения order by.Если у вас есть это, вы можете сделать что-то вроде

declare @data table 
(
OrderItemId int identity(1,1) primary key,
OrderID int, 
OrderTime datetime, 
OrderItem varchar(10))

insert into @data
SELECT 1,'00:01:00','Orange' UNION ALL
SELECT 1,'00:01:00','Apple' UNION ALL
SELECT 2,'00:03:00','Grape' UNION ALL
SELECT 3,'00:02:00','Apple' UNION ALL
SELECT 3,'00:02:00','Coconut' UNION ALL
SELECT 1,'00:05:00','Banana' UNION ALL
SELECT 1,'00:05:00','Apple';

WITH cte1 AS
(
SELECT *, ROW_NUMBER() over (ORDER BY OrderItemId)-
ROW_NUMBER() over (PARTITION BY OrderID ORDER BY OrderItemId) AS Grp
FROM @data
), cte2 AS
(
SELECT *, MIN(OrderTime) OVER (PARTITION BY OrderID, Grp) AS MinOrderTime
FROM cte1
)
UPDATE cte2 SET OrderTime = MinOrderTime

SELECT OrderID,convert(varchar, OrderTime, 8) OrderItemId, OrderItem
 FROM @data
 ORDER BY OrderItemId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...