我需要帮助编写查询以在我的数据库中的表上执行以下操作:
Select all rows where the values in Column1 are the same
If a 'Primary' has not been set in Column2 for any of them
Set Column2 = 'Primary' for first row in the group
Else go on to the next group
关键点:我只能拥有一个小学'每组标记
示例输入:
Column1 | Column2 |
ID1
ID1
ID1
ID2 Primary
ID2
ID3
ID3
示例结果:
Column1 | Column2 |
ID1 Primary
ID1
ID1
ID2 Primary
ID2
ID3 Primary
ID3
谢谢!
答案 0 :(得分:1)
SELECT Column1
,CASE
WHEN ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY [TargetColumn]) = 1
THEN 'Primary'
ELSE ''
END AS Column2
FROM TableName
TargetColumn
将是将在Column1的每个组中决定哪个值是主要值的列。
答案 1 :(得分:0)
使用ROW_NUMER
窗口函数查找每个组的第一条记录,然后仅更新primary
column2
值的记录
由于没有列可用于查找每个组的第一条记录,我在(select null)
中使用了order by
示例数据
CREATE TABLE #ee(Column1 VARCHAR(50),Column2 VARCHAR(50))
INSERT #ee
VALUES ('ID1',NULL),
('ID1',NULL),
('ID1',NULL),
('ID2','Primary'),
('ID2',NULL),
('ID3',NULL),
('ID3',NULL)
更新查询
;WITH cte
AS (SELECT *,
Row_number()OVER(partition BY column1 ORDER BY (SELECT NULL)) RN
FROM #ee a
WHERE NOT EXISTS (SELECT 1
FROM #ee b
WHERE a.Column1 = b.Column1
AND b.Column2 = 'primary'))
UPDATE cte
SET Column2 = 'primary'
WHERE rn = 1
<强>结果:强>
Column1 Column2
------- -------
ID1 primary
ID1 NULL
ID1 NULL
ID2 Primary
ID2 NULL
ID3 primary
ID3 NULL