如何检查这两个值是不是以 2 组的形式存在于 cell1 或 cell 2 中
Posted
技术标签:
【中文标题】如何检查这两个值是不是以 2 组的形式存在于 cell1 或 cell 2 中【英文标题】:How to check if the two values exist in either cell1 or cell 2 in groups of 2如何检查这两个值是否以 2 组的形式存在于 cell1 或 cell 2 中 【发布时间】:2020-11-11 04:03:30 【问题描述】:我需要一种方法来比较两个块中的单元格。需要比较 D2 和 D3,D4 和 D5 ... D10 和 D11。
如果两个单独的单元格(如 D2 或 D3)等于“Business”或“Compliance”,则返回 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;
【问题讨论】:
为什么 d6,d7 与 d2,d3 遵循不同的逻辑 结果是更大查询的一部分。我模仿我坚持的部分。需要比较两个块中的单元格。如果在两个单元格中显示“Business”或“Complinace”,则返回 true。一个由两个单元组成的块连续两次说出“Business”或“Complince”的实例失败。或者当两个单元格说出“业务”和“合规”以外的任何内容时,就会失败。这又是一个更大的查询的一部分。查询返回此结果,我有兴趣以某种模式识别“业务”和“合规”。 【参考方案1】:试试这个:
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
检查我是否对下一个值(1,2,5,etc
)或上一个值(2,4,6,etc
)感兴趣。
【讨论】:
以上是关于如何检查这两个值是不是以 2 组的形式存在于 cell1 或 cell 2 中的主要内容,如果未能解决你的问题,请参考以下文章