我有以下表格:
ID | Number | Condition 1 | Condition 2 | Condition 3 | Condition 4
1 | 1 | 1 | 2 | 1 | 1
1 | 2 | 2 | 1 | 2 | 2
2 | 5 | 2 | 2 | 2 | 1
2 | 6 | 2 | 2 | 2 | 2
3 | 7 | 1 | 1 | 2 | 1
3 | 8 | 2 | 1 | 1 | 2
3 | 3 | 2 | 1 | 2 | 2
4 | 9 | 2 | 1 | 1 | 1
4 | 4 | 1 | 1 | 1 | 2
5 | 10 | 2 | 1 | 2 | 1
5 | 13 | 2 | 1 | 2 | 2
(相当混乱,抱歉)
如您所见,有多个ID。我必须根据条件取一个ID。所以,我想逐个检查每个条件,并根据输出结果添加一列。这背后的逻辑是
如果(对于每组ID')一行
condition
= 1,那么这是正确的一行。如果两行都是1或两者都是2,那么我们检查以下条件。
因此,如果我们仅采用ID 1
的记录,我们可以看到ID 1 - Number 1
是我们输出中所需的正确记录。
但是如果我们采用ID 2
,我们会发现两个记录都具有相同的值,但我们没有给出答案。在这种情况下,我们会查看condition 2
并在那里实现相同的逻辑。
(condition 4
对于每个ID,总是会有一个记录为' 1'
所以我的输出是:
ID | Number | Condition 1 | Condition 2 | Condition 3 | Condition 4 | IsOk
1 | 1 | 1 | 2 | 1 | 1 | 1
1 | 2 | 2 | 1 | 2 | 2 | 2
2 | 5 | 2 | 2 | 2 | 1 | 1
2 | 6 | 2 | 2 | 2 | 2 | 2
3 | 7 | 1 | 1 | 2 | 1 | 1
3 | 8 | 2 | 1 | 1 | 2 | 2
3 | 3 | 2 | 1 | 2 | 2 | 2
4 | 9 | 2 | 1 | 1 | 1 | 2
4 | 4 | 1 | 1 | 1 | 2 | 1
5 | 10 | 2 | 1 | 2 | 1 | 1
5 | 13 | 2 | 1 | 2 | 2 | 2
有任何建议/意见吗?
我将在SSIS中使用它,因此SSIS中的解决方案或纯SQL代码对我来说都没问题。
如果有人想知道:我用Case
,CASE
when [Condition1] = 1 then 1
else CASE when [Condition2] = 1 then 1
else CASE when [Condition3] = 1 then 1
else CASE when [Condition4] = 1 then 1 END
END
END
END AS IsOk
但是没有提供所要求的结果
答案 0 :(得分:2)
这可以通过自引用派生表来实现。基本上,您检查每一行是否独立“确定”然后将该数据集连接到自身以检查前一行是否已被视为“确定”,在这种情况下将其标记为“不正常”。这是有效的,因为您的条件始终为1
或2
,因此在创建row_number
时,您可以优先订购Condition
,并保证“第一”行为“确定”将具有优先row_number
即:对于同一{{1},您将不会返回任何“Ok”行的行,其中row_number
行高于“Not Ok”行}}:
ID