根据另一列的不同值更新一行

问题描述

我有一个包含邮政编码,郊区及其经度和纬度的数据集。

对于每个邮政编码,在该邮政编码内有多个行,其中具有对应的郊区,因此当我将其与在Power BI中具有按邮政编码进行销售的另一个表进行匹配时,我最终会为每个邮政编码返回多个行。

我想做的是插入一个名为unique_postcode的列作为布尔值,将每个邮政编码的一行标记为True。我不在乎哪一个。我尝试了以下方法以及其他一些选项,但没有出现任何错误,但没有任何影响。

UPDATE postcodes
SET post_codes.unique_postcode = 1
FROM (
    SELECT DISTINCT(postcode)
    FROM postcodes
);

解决方法

您可以使用针对随机行的可更新CTE:

WITH cte AS (
    SELECT *,ROW_NUMBER() OVER (PARTITION BY postcode ORDER BY postcode) rn
    FROM postcodes
)

UPDATE cte
SET unique_postcode = 1
WHERE rn = 1;

请注意,由于ROW_NUMBER中使用的排序本身使用的是邮政编码,因此在邮政编码具有多个相关记录的情况下,“第一”行号值可以是任何行

,

您可以使用row_number()来定义将标志分配给的特定标志。在更新中,它看起来像:

WITH toupdate AS (
      SELECT p.*,ROW_NUMBER() OVER (PARTITION BY postcode ORDER BY postcode) as seqnum
      FROM postcodes p
     )
UPDATE toupdate
    SET unique_postcode = (CASE WHEN seqnum = 1 THEN 1 ELSE 0 END);

注意:这会将一个值设置为“ 1”,而将其他值设置为“ 0”。在表上多次运行也是安全的。

,

如果该行无关紧要,那么最简单的方法就是选择TOP 1。

with cte as (select top 1 * from postcodes)
update cte
set unique_postcode = 1;

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...