首页 > 解决方案 > 比较前两行并识别同一表中值不同的列

问题描述

我有几列的表,并且该表包含具有相同值的多行(仅适用于少数字段)。附上我的桌子。

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版本

标签: sqlsql-servertsql

解决方案


您可以取消透视和聚合:

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);

推荐阅读