我有一个与此类似的表:
|ID| |Error| |Subject| |Note|
==============================================================
|1 |Start Date Required |Flag Flip |Flipped per cust|
|1 |Start Date Required |Date |Start Date and End Date N.A.
|1 |End Date Required |Flag Flip |Flipped per cust
|1 |End Date Required |Date |Start Date and End Date N.A.
|8 |Description Required |Date |Date
|4 |Sink Flag not set |Factor |Factor is N.A
|4 |Sink Flag not set |Factor Update |Factor is N.A.
|4 |Sink Flag not set |Sink |Not Sinkable
我正在尝试创建另一个名为“ STATUS”的列。 每个ID我可以有多个注释,有时它们与错误无关。 这就是为什么看到ID 1时只有2个错误,却有4列的原因,因为此ID上还附有“标志翻转”注释。 对于每个“错误”,它将重复ID上附加的每个注释。
我们只关心与错误相关的主题/注释。 如果ID相同,并且NOTE列中的ONE列与ERROR列有关,则其状态可能为'CLEAR'。 如果没有与错误相关的注释,则注释的状态必须为“正在查看”
由于这种逻辑我希望拥有的表
|ID| |Error| |Subject| |Note| |STATUS|
=======================================================================================
|1 |Start Date Required |Flag Flip |Flipped per cust| |Clear|
|1 |Start Date Required |Date |Start Date and End Date N.A. |Clear|
|1 |End Date Required |Flag Flip |Flipped per cust |Clear|
|1 |End Date Required |Date |Start Date and End Date N.A. |Clear|
|8 |Description Required |Date |Date |Review|
|4 |Sink Flag not set |Factor |Factor is N.A |Clear|
|4 |Sink Flag not set |Factor Update |Factor is N.A. |Clear|
|4 |Sink Flag not set |Sink |Not Sinkable |Clear|
如果上方或下方的行具有相同的ID,并且ERROR列具有与之关联的NOTE,则清除。如果没有与错误有关的注释(按ID),则进行审阅。
例如,由于ID 1具有开始日期/结束日期错误,并且NOTE与NA的开始日期/结束日期有关,因此对于ID为1的所有4行,它的状态都为CLEAR
因为ID 8的错误为“需要描述”,但“注”与DATE有关,因此必须进行回顾,因为没有关于描述的注解。
由于ID 4出现接收器标志错误,并且一行包含SINK主题/注释,因此对于所有3行,其状态都可能为CLEAR
我不确定如何编写此逻辑。我分别为每一行提供逻辑,但是我不知道如何通过ID将它们关联起来,因此,如果具有相同ID的一行具有与错误相关的注释,那么可以清除具有该ID的所有行。 任何帮助,将不胜感激!谢谢。
答案 0 :(得分:0)
好的,所以我们设法到达了一个可以在查询中构建一些智能的地方,以便它知道如何处理一些错误..然后我们可以从那里构建
这是根据我们所知的首过查询:
[
"oldVM1",
"wCloud1"
]
这会将某些行清除为“ Clear”,但大多数需要复查。我们不介意这种想法,因为yu似乎在说,只要给定ID的任何一行都是“清除”,它们都可以被清除。在这种情况下,我将利用这样一个事实,即按字母顺序排列的“清除”在“审阅”之前,因此,如果我们按ID分组并询问MIN状态,如果任何内容为“清除”,则它们都将获得清除:
SELECT
ID,
CASE
WHEN error LIKE '%Date Required' AND Note LIKE '%'||REPLACE(error, ' Required', '%') THEN 'Clear'
WHEN error LIKE '%Sink%' and note LIKE '%sink%' THEN 'Clear'
ELSE 'Review'
END as Status
FROM
table
现在,要应用此基于id的确定,我们要做的就是使其成为子查询并将其联接回数据:
SELECT
ID,
MIN(CASE
WHEN error LIKE '%Date Required' AND Note LIKE '%'||REPLACE(error, ' Required', '%') THEN 'Clear'
WHEN error LIKE '%Sink%' and note LIKE '%sink%' THEN 'Clear'
ELSE 'Review'
END) as Status
FROM
table
GROUP BY
ID