Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SQL中的值按组替换为条件_Sql_Sql Server - Fatal编程技术网

将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

我在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     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个可能值,该组将永远不会只有“是”或空值