Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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,我有一张像这样的桌子 ID Name Country Published 1 Madrid 0 2 Madrid Spain 1 3 Paris France 0 4 London England 0 在名称相同的任何情况下,我都需要将国家/地区从Published=1条目复制到Published=0条目。我一直是这样用手做的: UPDATE mytable SET Country=(SELECT Country FR

我有一张像这样的桌子

ID   Name    Country  Published
1    Madrid           0
2    Madrid  Spain    1
3    Paris   France   0
4    London  England  0
在名称相同的任何情况下,我都需要将国家/地区从Published=1条目复制到Published=0条目。我一直是这样用手做的:

UPDATE mytable SET Country=(SELECT Country FROM mytable  WHERE ID = 2) WHERE ID=1
但是有没有什么方法可以自动完成这项工作,而不是手工完成每一项工作?

使用join完成这项工作:

DECLARE @t TABLE
    (
      ID INT ,
      Name VARCHAR(20) ,
      Country VARCHAR(20) ,
      Published BIT
    )

INSERT  INTO @t
VALUES  ( 1, 'Madrid', NULL, 0 ),
        ( 2, 'Madrid', 'Spain', 1 ),
        ( 3, 'Paris', 'France', 0 ),
        ( 4, 'London', 'England', 0 )


UPDATE t1 SET Country = t2.Country
FROM @t t1
JOIN @t t2 ON t1.Name = t2.Name AND t2.Published = 1
WHERE t1.Country IS NULL AND t1.Published = 0

SELECT * FROM @t
输出:

ID  Name    Country Published
1   Madrid  Spain   0
2   Madrid  Spain   1
3   Paris   France  0
4   London  England 0

试试下面的代码。希望对你有帮助

update t1
    set t1.country = t2.country
    from table t1
    inner join table t2
    on t1.Name = t2.Name and t2.published = 1
    where t1.published = 0

在查询中,您只需更改
ID
引用,以匹配基于
Name
的相关子查询,并为
Published
Country
添加过滤器

UPDATE t
SET Country = (SELECT TOP 1 Country FROM t t2 WHERE t2.Name = t.Name AND Published = 1 ORDER BY Country)
WHERE Published = 0
AND Country IS NULL;

UPDATE t
SET Country = (SELECT TOP 1 Country FROM t t2 WHERE t2.Name = t.Name AND Published = 1 ORDER BY Country)
WHERE Published = 0
AND Country IS NULL;