由于逻辑差和数据库外部的用户错误,我的设备可能会出现在许多文件中。我知道应该基于一组规则将其放在哪个文件中,并且我希望使用第三个布尔值或二进制响应类型列将其自动化。
这是表格外观的一个示例。您可以看到设备如何显示在多个文件中。
device | file
A 1862
A 1880
B 1880
C 1901
C 1880
要应用的规则如下:
我曾尝试使用自连接逻辑和大小写,但似乎无法正确处理。
这就是我要结束的事情。
device | file | Correct
A 1862 Yes --it exists here so we don't care if it exists elsewhere
A 1880 No --because it exists in 1862
B 1880 Yes --because it does not exist in 1901 or 1862
C 1901 Yes --it exists here so we don't care if it exists elsewhere
C 1880 No --because it also exists in 1901
我只需要一个正确的输出,即在此阶段不需要校正表;这是为了证明表格需要更正:-)
答案 0 :(得分:1)
使用CASE的3条规则:
select t.*,
case
when file in (1862, 1901) then 'Yes'
when file = 1880 and not exists (
select 1 from tablename
where device = t.device and file in (1862, 1901)
) then 'Yes'
else 'No'
end Correct
from tablename t;
请参见demo。
结果:
| device | file | Correct |
| ------ | ---- | ------- |
| A | 1862 | Yes |
| A | 1880 | No |
| B | 1880 | Yes |
| C | 1901 | Yes |
| C | 1880 | No |
答案 1 :(得分:0)
使用窗口功能:
select t.*,
(case when file in (1862, 1901) then 'Yes'
when file = 1880 and
sum(case when file in (1862, 1901) then 1 else 0 end) over (partition by device) = 0
then 'Yes'
else 'No'
end) as flag
from t;