Tsql T-SQL:将每个组第一行中的字段更新为一个值,并将其余字段设置为另一个值?
我有这张桌子:Tsql T-SQL:将每个组第一行中的字段更新为一个值,并将其余字段设置为另一个值?,tsql,sql-server-2008-r2,group-by,updates,Tsql,Sql Server 2008 R2,Group By,Updates,我有这张桌子: ID |Type|Date 17494|NULL|2013-09-04 15:00:00.000 17577|NULL|2013-09-04 15:00:00.000 17639|NULL|2013-09-04 17:00:00.000 17701|NULL|2013-09-04 17:00:00.000 我想按日期分组,然后更新每个日期组第一行上的类型字段,并将其设置为“F”,其余(可以是一个也可以是多个)将其设置为“V” 结果: ID |Type|Dat
ID |Type|Date
17494|NULL|2013-09-04 15:00:00.000
17577|NULL|2013-09-04 15:00:00.000
17639|NULL|2013-09-04 17:00:00.000
17701|NULL|2013-09-04 17:00:00.000
我想按日期分组,然后更新每个日期组第一行上的类型字段,并将其设置为“F”,其余(可以是一个也可以是多个)将其设置为“V”
结果:
ID |Type|Date
17494|F |2013-09-04 15:00:00.000
17577|V |2013-09-04 15:00:00.000
17639|F |2013-09-04 17:00:00.000
17701|V |2013-09-04 17:00:00.000
SQL2005+的解决方案:
DECLARE @MyTable TABLE
(
ID INT NOT NULL,
[Type] CHAR(1) NULL,
[Date] DATETIME NOT NULL
);
INSERT @MyTable (ID, [Type], [Date])
SELECT 17494, NULL, '2013-09-04 15:00:00.000' UNION ALL
SELECT 17577, NULL, '2013-09-04 15:00:00.000' UNION ALL
SELECT 17639, NULL, '2013-09-04 17:00:00.000' UNION ALL
SELECT 17701, NULL, '2013-09-04 17:00:00.000';
WITH MyTableWithRowNum
AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY x.[Date] ORDER BY x.ID) AS RowNum
FROM @MyTable x
)
UPDATE MyTableWithRowNum
SET [Type] = CASE WHEN RowNum = 1 THEN 'F' ELSE 'V' END;
SELECT * FROM @MyTable;
结果:
ID Type Date
----------- ---- -----------------------
17494 F 2013-09-04 15:00:00.000
17577 V 2013-09-04 15:00:00.000
17639 F 2013-09-04 17:00:00.000
17701 V 2013-09-04 17:00:00.000
试试这个:
UPDATE T
SET Type = CASE WHEN IDD = 1 THEN 'F' ELSE 'V' END
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY Date ORDER BY ID) IDD , * FROM tbl) T;
嗨,没有直接的查询来实现这一点。但我们可以通过努力实现这一目标
With #temptable as(
select Row_number() over( PARTITION BY date1 ORDER BY date1) Rank, *
from tablea)
update TableA set Type = 'F'
where id in (select Id from #temptable where Rank = 1)
update TableA set Type = 'V'
where Type is null
select * from TableA
我登录了SQLFiddle,它正在工作您使用的是哪个版本的sql server?谢谢您的回复。我在SQL Server 2008 R2上,您可以替换
更新。。。使用设置…
从MyTableWithRowNum中选择*以查看MyTableWithRowNum的结果。