sql - 如何在 SQL 中将 cell1 与 cell 2 组 2 进行比较
问题描述
我需要一种方法来比较两个块中的单元格。需要将 D2 与 D3 进行比较,将 D4 与 D5 进行比较 ... D10 与 D11 进行比较。
如果两个单独的单元格(如 D2 或 D3)等于“业务”或“合规性”,则返回 true。
如果一个块具有相同的值,如单元格 D6 和 D7 中的“业务”或单元格 D10 和 D11 中的“合规性”,则代码应返回失败。
create table data
(
ID int,
[Col A] nvarchar(10),
[Col B] nvarchar(10),
[Col C] nvarchar(10)
);
insert into data (ID, [Col C]) values
(1, 'Business'),
(2, 'Compliance'),
(3, 'Compliance'),
(4, 'Business'),
(5, 'Business'),
(6, 'Business'),
(7, 'Compliance'),
(8, 'Business'),
(9,'Compliance'),
(10,'Compliance');
select d.ID,
d.[Col C],
case when ( d.[Col C] = coalesce(lag(d.[Col C]) over(order by d.ID), '')
and d.[Col C] = coalesce(lead(d.[Col C]) over(order by d.ID), '') ) then 'FAIL'
when d.[Col C] <> coalesce(lag(d.[Col C]) over(order by d.ID), '') then 'Ok'
when d.[Col C] <> coalesce(lead(d.[Col C]) over(order by d.ID), '') then 'Ok'
end as B
from data d
order by d.ID;
解决方案
使用窗口函数比较组中的行:
select d.*,
(case when min(c) over (partition by (id - 1) / 2) = max(c) over (partition by (id - 1) / 2)
then 'fail' else 'ok'
end)
from data d
这是一个 db<>fiddle。
注意:这假设id
没有间隙。如果是这样,您可以使用它row_number()
来计算一个序列。
推荐阅读
- function - 没有参数的VHDL函数?
- python - 创建 Scapy 层时的扩展字段(链接字节)
- c# - 触摸某个物体时如何使角色弹跳
- python - 计算数据框中记录的唯一性
- python - 如何在 MATLAB 或 Python 中生成 3D 螺旋?
- android - ANDROID - 如何从不同的班级访问另一个班级?
- ruby-on-rails - 当密码正确且电子邮件不是参数时,Rails 设计“无效的电子邮件或密码”
- video-streaming - 通过 RTSP 更改视频上的时间位置
- google-sheets - 搜索一个单元格是否包含不同类型的字符串,并根据该字符串输出一个字符串
- neo4j - 在 neo4j 中,如何将节点组合成组并在这些组之间建立关系?