首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中将cell1与2个单元格2组进行比较

如何在SQL中将cell1与2个单元格2组进行比较
EN

Stack Overflow用户
提问于 2020-11-11 10:50:24
回答 1查看 39关注 0票数 0

我需要一种方法来比较两个的块中的单元格。需要比较D2与D3,D4与D5…D10对D11的攻击。

如果像D2或D3这样的两个单独的单元格等于“业务”或“遵从性”,则返回true。

如果一个块具有相同的值,如单元格D6 & D7中的“业务”或单元格D10 & D11中的“遵从性”,则代码应返回fail。

代码语言:javascript
复制
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;

Fiddle

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-11 11:01:06

使用窗口函数比较组中的行:

代码语言:javascript
复制
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

Here是一个db<>fiddle。

注意:这假设id没有间隙。如果是这样,您可以使用row_number()来计算序列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64779770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档