Эти 2 утверждения должны дать вам то, что вы ищете.если вы только после SELECT
заявления, то первое, что вы после.Если вы хотите на самом деле UPDATE
все строки, то вам нужна строка с CTE:
USE Sandbox;
GO
CREATE TABLE dbo.Tab (ColA char(4),
ColB char(5),
ColC char(5),
ColD char(5),
ColE char(5),
ColF char(5));
INSERT INTO dbo.Tab (ColA,
ColB,
ColC,
ColD,
ColE,
ColF)
VALUES('ROW1','Item1',2341,Null,Null,Null),
('ROW2','Item2',7953,Null,Null,Null),
('ROW3','Item1',Null,2342,Null,Null),
('ROW4','Item2',Null,9827,Null,Null),
('ROW5','Item1',Null,Null,1945,Null),
('ROW6','Item2',Null,Null,0745,Null),
('ROW7','Item1',Null,Null,Null,1298),
('ROW8','Item2',Null,Null,Null,2356);
GO
SELECT ColA,
ColB,
MAX(ColC) OVER (PARTITION BY ColB) AS ColC,
MAX(ColD) OVER (PARTITION BY ColB) AS ColD,
MAX(ColE) OVER (PARTITION BY ColB) AS ColE,
MAX(ColF) OVER (PARTITION BY ColB) AS ColF
FROM dbo.Tab
ORDER BY ColB;
GO
WITH CTE AS(
SELECT ColA,
ColB,
ColC,
ColD,
ColE,
ColF,
MAX(ColC) OVER (PARTITION BY ColB) AS ColCn,
MAX(ColD) OVER (PARTITION BY ColB) AS ColDn,
MAX(ColE) OVER (PARTITION BY ColB) AS ColEn,
MAX(ColF) OVER (PARTITION BY ColB) AS ColFn
FROM dbo.Tab)
UPDATE CTE
SET ColC = ColCn,
ColD = ColDn,
ColE = ColEn,
ColF = ColFn;
GO
SELECT *
FROM Tab;
GO
DROP TABLE dbo.Tab;