比较 postgres 中的两个列值

Ram*_*Ram 0 sql case sql-update postgresql-9.1

我有一个包含以下列和记录的表。我需要比较两列值(ColumnA 和 ColumnB),如果 ColumnB>ColumnA 则将第三列从“N”更新为“Y”

CREATE TABLE Test(ColumnA int,ColumnB int,Result Varchar(2))

INSERT INTO Test values(1,3,'N')
INSERT INTO Test values(2,1,'N')
INSERT INTO Test values(1,5,'N')
INSERT INTO Test values(8,7,'N')
Run Code Online (Sandbox Code Playgroud)

我需要更新第一行和第三行的 Result Column='Y' 因为 columnB>ColumnA

结果

ColumnA   ColumnB Result
1          3      Y
2          1      N
1          5      Y
8          7      N
Run Code Online (Sandbox Code Playgroud)

小智 5

这可以通过一个简单的 CASE 表达式来完成:

update test
  set result = case 
                 when columna > columnb then 'Y' 
                 else 'N' 
               end
;
Run Code Online (Sandbox Code Playgroud)

在线示例: https: //rextester.com/ZHIUZD82060


我建议使用boolean列而不是varchar存储“是/否”标志。然后更新就变得简单了set result = column_a > columnb