将SQL中的值按组替换为条件
我在SQL中有一个数据集,如下所示:将SQL中的值按组替换为条件,sql,sql-server,Sql,Sql Server,我在SQL中有一个数据集,如下所示: Col1 Col2 A Yes A Yes A NULL B NULL B NULL B NULL C NULL C Yes Col1 Col2 A Yes A Yes A No B NULL B NULL B NULL C No C
Col1 Col2
A Yes
A Yes
A NULL
B NULL
B NULL
B NULL
C NULL
C Yes
Col1 Col2
A Yes
A Yes
A No
B NULL
B NULL
B NULL
C No
C Yes
如果Col2中的值对于特定组(如“a”)为“是”,则将空值替换为“否”。如果该组没有“是”,则保留为空
我希望我的最终输出如下所示:
Col1 Col2
A Yes
A Yes
A NULL
B NULL
B NULL
B NULL
C NULL
C Yes
Col1 Col2
A Yes
A Yes
A No
B NULL
B NULL
B NULL
C No
C Yes
任何帮助都很好,谢谢使用CTE选择“是”的组,然后相应地更新您的表格:
;WITH
YesGroup AS
(
SELECT DISTINCT
Col1
FROM MyTable
WHERE Col2 = 'Yes'
)
UPDATE T
SET Col2 = 'No'
FROM MyTable T
INNER JOIN YesGroup YES ON T.Col1 = YES.Col1
WHERE T.Col2 IS NULL
如果要避免使用临时表,请尝试此操作 我相信,在大数据集中,OVER(按分区)的性能会更好 仍然没有回复合并任务
select Col1,
Case when tempV > 0 and [Col2] is null then 'No'
else [Col2]
end
from (
SELECT [Col1]
,[Col2],
SUM(CASE when ( [Col2]='Yes') then 1
else 0
end ) OVER(PARTITION BY [Col1]) as tempV
FROM [test].[dbo].[Table_1]
)A
或
我想我知道你在问什么,但它有点开放(不使用CTE,这是另一个可行的选择):
我想这会有用的
update table1
set col2 = 'No'
where col2 is null
AND exists (
select *
from table1 a
where table1.col1 = a.col1
AND col2 = 'Yes')
保持简单:
SELECT
col1,
CASE
WHEN col1 IN(SELECT col1 FROM @test WHERE col2 = 'Yes') AND col2 IS NULL THEN 'No'
ELSE col2
END col2
FROM someTable
有关更新:
UPDATE t
SET
col2 = 'No'
FROM someTable t
JOIN someTable t2 ON t.col1 = t2.col1 AND t2.col2 = 'Yes'
WHERE
t.col2 IS NULL
我只想使用
EXISTS
:
select Col1, coalesce(Col2, 'No') as Col2
from table t
where exists (select 1 from table t1 where t1.col1 = t.col1 and t1.col2 = 'Yes');
现在,您可以使用UPDATE
语句:
update t
set Col2 = 'No'
from table t
where exists (select 1 from table t1 where t1.col1 = t.col1 and t1.col2 = 'Yes') and
Col2 is null;
如果A组以“是”和“否”开头,并且“是/否/空”是仅有的3个可能值,该组将永远不会只有“是”或空值