首页 > 解决方案 > MySQLServer:检查组中是否存在条件,然后标记整个组

问题描述

我的目标是在现有表中添加另一列,以查看值/条件是否存在于组中,并适当地标记整个组(如果存在或不存在)。

如果团队有一个预算 >= 20M 或 Actual_Spend >=2.5MI 的项目,则希望在类别列中将团队及其所有项目标记为表 1。无论同一团队中的其他项目是否符合此标准。

我将提供一个带有我的解决方案的 SQL 小提琴链接:http ://sqlfiddle.com/#!18/3ddaf/12/0 我 最终会得到两个额外的“团队”和“类别”列,但不确定如何他们到了那里。下面是我正在寻找的最终结果。我愿意接受比我提供的更好的解决方案。

感谢您的时间

    | Team | ProjectID | Budget   | Actual_Spend | State      | Category |
    |------|-----------|----------|--------------|------------|----------|
    | Cyan | 2         | NULL     | NULL         | Utah       | Table 1  |
    | Blue | 1         | NULL     | 3000000      | California | Table 1  |
    | Cyan | 1         | 20000000 | 1000000      | Utah       | Table 1  |
    | Blue | 2         | 22000000 | NULL         | California | Table 1  |
    | Red  | 1         | 7000000  | 1000000      | Washington | Table 2  |
    | Red  | 2         | 19999000 | 2490000      | Oregon     | Table 2  |
    | Gray | 1         | 19000000 | 2500000      | Utah       | Table 1  |
    | Gray | 1         | 10000000 | 500000       | Utah       | Table 1  |

提供创建数据集的代码:

    Create Table Source_Data
    (
      Team varchar(50),
      ProjectID  INT,
      BUDGET INT,
      Actual_Spend INT,
      State varchar(max),
     )

     INSERT INTO Source_Data
     VALUES
     ('Blue',1,NULL,3000000,'California'),
     ('Green',1,20000000,1000000,'Utah'),
     ('Blue',2,22000000,NULL,'California'),
     ('Green',2,NULL,NULL,'Utah'),
     ('Red',1,7000000,1000000,'Washington'),
     ('Red',2,19999000,2490000,'Oregon'),
     ('Yellow',1,19000000,2500000,'Utah'),
     ('Yellow',1,10000000,500000,'Utah');

标签: sql-serverleft-joinself-join

解决方案


我认为您正在寻找窗口功能:

select
    s.*,
    min(case when Budget>=20000000 or Actual_Spend>=2500000 then 'Table1' else 'Table2' end)
        over(partition by team) Category
from Source_Data s

如果具有相同团队的任何记录满足条件Budget>=20000000 or Actual_Spend>=2500000,则新列产生Table1,否则产生Table2

DB Fiddle 上的演示

团队 | 项目ID | 预算 | 实际_花费 | 状态 | 类别
:--- | --------: | --------: | ------------: | :--------- | :--------
蓝色 | 2 | 22000000 |         | 加利福尼亚 | 表格1  
蓝色 | 1 |     | 3000000 | 加利福尼亚 | 表格1  
青色 | 1 | 20000000 | 1000000 | 犹他州 | 表格1  
青色 | 2 |     |         | 犹他州 | 表格1  
灰色 | 1 | 19000000 | 2500000 | 犹他州 | 表格1  
灰色 | 1 | 10000000 | 500000 | 犹他州 | 表格1  
红色 | 1 | 7000000 | 1000000 | 华盛顿 | 表2  
红色 | 2 | 19999000 | 2490000 | 俄勒冈 | 表2  

推荐阅读