sql - 比较前两行并识别同一表中值不同的列
问题描述
我有几列的表,并且该表包含具有相同值的多行(仅适用于少数字段)。附上我的桌子。
Id EmpName ProjectName ChargeDesc CostCenter Jan Feb Mar Apr May Jun Jul
32 2487 1386 124030 017N 0 0 0 0 0 3 0
33 2487 1386 124030 017N 0 0 0 0 0 3 3
就像上图一样,这是我的要求。
我想获得条件如下的前 2 行(empname、projname、chargeesc、costcenter)并将创建日期作为 desc。
在这里,我想比较这两行并找出列与值的差异。
因此,上图中的示例除了 Jul 列之外,所有字段都是相同的值。所以我想要像 Jul 列这样的输出,其值为 3。
这里使用的是SQL Server 2019版本
解决方案
您可以取消透视和聚合:
select empname, projname, chargedesc, costcenter, mon,
min(val), max(val)
from t cross apply
(values ('Jan', jan), ('Feb', feb), . . .
) v(mon, val)
group by empname, projname, chargedesc, costcenter, mon
having min(val) <> max(val);
推荐阅读
- angular - '[value]' 没有以反应形式 Angular 设置控制值
- reactjs - 无法在 react-native 中创建 ref
- netlogo - 如果它在netlogo的某个半径内,如何阻止海龟一段时间并杀死两只海龟
- laravel - 如何在 Laravel 登录中阻止 GET 方法?
- c# - 为什么不 AsyncUnaryCall
和其他人扩展任务 ? - c# - 使用 Continuation 链接任务的正确方法
- git - 如何列出存储库中的所有提交及其父信息以及使用命令行或 JGit 添加和删除的行?
- json - 无法检索参数输出的值
- java - 如何在android中发送没有键盘的按键动作?
- apache-spark - 在 foreach 中创建数据框的替代方法