首页 > 解决方案 > 如何检查这两个值是否以 2 组的形式存在于 cell1 或 cell 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, 'Compliance'),
(9,'Business'),
(10,'Marketing');

select d.ID,
       d.[Col C],
       case 
            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;

标签: sqlsql-servertsqlwindow-functions

解决方案


尝试这个:

SELECT *
      ,CASE 
            WHEN [ID] % 2 = 1 AND [Col C] = 'Business' AND LEAD([Col C]) OVER(ORDER BY [ID]) = 'Compliance' THEN 'OK'
            WHEN [ID] % 2 = 1 AND [Col C] = 'Compliance' AND LEAD([Col C]) OVER(ORDER BY [ID]) = 'Business' THEN 'OK'
            WHEN [ID] % 2 = 0 AND [Col C] = 'Business' AND LAG([Col C]) OVER(ORDER BY [ID])= 'Compliance' THEN 'OK'
            WHEN [ID] % 2 = 0 AND [Col C] = 'Compliance' AND LAG([Col C]) OVER(ORDER BY [ID])= 'Business' THEN 'OK'
            ELSE 'Fail'
       END AS [Result]
FROM [dbo].[data];

在此处输入图像描述

[ID] % 2用来检查我是否对下一个值 (for 1,2,5,etc) 或前一个值 (for ) 感兴趣2,4,6,etc


推荐阅读