首页 > 解决方案 > 如何在 SQL Server 和 Postgresql 中实现这一点

问题描述

输入/输出

country Status
ind     y
ind     y
ind     y
us      y
us      y
us      y
uk      y
uk      y
uk      n

o/p

country Status  Flag
ind     y       1
ind     y       1
ind     y       1
us      y       1
us      y       1
us      y       1
uk      y       0
uk      y       0
uk      n       0

标签: sql

解决方案


你似乎想要EXISTS

SELECT t.*, 
       (CASE WHEN EXISTS (SELECT 1 
                          FROM table t1 
                          WHERE t1.country = t.country AND t1.Status = 'n'
                         ) 
             THEN 0 ELSE 1 
        END) AS Flag
FROM table t;

您还可以使用窗口功能:

SELECT t.*, 
      (CASE WHEN SUM(CASE WHEN [STATUS] = 'n' THEN 1 ELSE 0 END) OVER (PARTITION BY COUNTRY) = 1 
            THEN 0 ELSE 1 
       END) AS Flag
FROM table t;

推荐阅读