问题描述
我有一个包含邮政编码,郊区及其经度和纬度的数据集。
对于每个邮政编码,在该邮政编码内有多个行,其中具有对应的郊区,因此当我将其与在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;