sql - 如何检查这两个值是否以 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;
解决方案
尝试这个:
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
。
推荐阅读
- javascript - 为什么当我尝试编译时,Rome 认为我的文件是空的?
- r - 在 if else 语句中未强制执行 R stop() 函数
- linux - 需要帮助在 csv 文件中创建新列
- node.js - 如何设置节点模块导出类型信息
- python - 成功请求后反应前端未收到来自 Django HttpResponse 的响应
- json - 在 Flutter 表中查看排序后的 Json 数据
- css - 如何将图像路径从数据库传递到 css 属性
- sql - 尽管“设置服务器输出关闭”,Oracle 仍然显示假脱机语句?
- linux - RPM 的签名内容
- d3.js - d3.js 标签图边[当边值不是数字时]