Item Status
7080 On Hold
7080 Working on It
7090 On Hold

当条目具有相同的编号,即7080,并且具有"正在处理"和"暂挂"状态时,它应该在这两种状态下都显示"正在处理".

我使用CASE表达式编写了一个解决方案,但不起作用.

Edit:根据我的数据改编@Lemon的答案.

SELECT DISTINCT 
    SUBSTRING(item, 1, 4) Item,
    CASE 
        WHEN MAX(CASE 
                     WHEN [Eng Status] = 'Working on It' 
                         THEN 1 
                 END) OVER (PARTITION BY Item) = 1
            THEN 'Working on It'
            ELSE [Eng Status]
    END AS Status
FROM 
    tbl

结果与上一次相同,仍然不起作用.

Item Status
7080 On Hold
7080 Working on It
7090 On Hold

Edit:

select col1,col2 from tbl

Data

这就是数据

推荐答案

对表达式使用与原始列相同的名称不是一个好主意.您将表达式称为item,但它实际上只是原始item的子字符串.这让您感到困惑,您将MAX OVER除以item.DBMS还没有看到您创建的别名,并使用该列.以下是更正后的查询:

SELECT DISTINCT 
    SUBSTRING(item, 1, 4) AS item,
    CASE 
        WHEN MAX(CASE 
                     WHEN [Eng Status] = 'Working on It' 
                         THEN 1 
                 END) OVER (PARTITION BY SUBSTRING(item, 1, 4)) = 1
            THEN 'Working on It'
            ELSE [Eng Status]
    END AS Status
FROM 
    tbl

Sql相关问答推荐

postgresql插入json不工作

用相同值更新行

为表中每个缺少的引用创建新行

冲突查询的UPDATE时违反非空约束

数据库SQL-CTE命名空间(错误?)使用临时视图

在Netezza SQL中将字符DataType转换为整型DataType

postgres中的条件索引和触发器

使用 union 的有序结果获取行数

从输出中删除 jsonb_build_object

从另一个没有公共键的表中获取值来加入

在 R 值的 SQL 块中显示值

如何为 ActiveRecord 联接应用附加条件

如何在第二个 INSERT 中使用第一个 INSERT 自动生成的 ID

SQL Server - 复杂场景 - 比较状态并填充值到后续行

删除重复记录但保留最新的SQL查询

按所选的值将记录分组到不同的列中

正则表达式忽略特定数据部分的分隔符

使用给定的变量对在循环中执行更新语句

将 MERGE 语句与 Oracle PL/SQL 表类型一起使用时,导致无效数据类型错误的原因是什么?

BigQuery 将一行拆分为多列