SQL server不匹配列
我正在尝试为SQL Server编写一个查询 必须对两个单独的列求和 如果列Debe小于列Haber,则应打印不匹配 解释是: 有两个表ContD和Cont具有公共列ID ContD表有两个重要的列,Debe和Haber。 表Cont有一个重要列Importe 如果Debe之和不等于Haber之和,则应报告在另一列上打印消息 如果最终数字Debe和Haber相等,则与表Cont的列Importe比较,并在另一列中打印一致SQL server不匹配列,sql,sql-server,Sql,Sql Server,我正在尝试为SQL Server编写一个查询 必须对两个单独的列求和 如果列Debe小于列Haber,则应打印不匹配 解释是: 有两个表ContD和Cont具有公共列ID ContD表有两个重要的列,Debe和Haber。 表Cont有一个重要列Importe 如果Debe之和不等于Haber之和,则应报告在另一列上打印消息 如果最终数字Debe和Haber相等,则与表Cont的列Importe比较,并在另一列中打印一致 这应该可以做到: 注意:我已经对您实际想要使用的脚本进行了注释,未注释的脚
这应该可以做到: 注意:我已经对您实际想要使用的脚本进行了注释,未注释的脚本是我根据您共享的屏幕截图制作的一个快速示例,但是正如所说的,请在下次添加一个示例 注2:我假设表Cont中的id是主键或它只是唯一的,而表contD中的id是外键或它只是没有唯一性约束
DECLARE @t1 AS TABLE (id NUMERIC,debe DECIMAL(18,2),haber DECIMAL(18,2))
DECLARE @t2 AS TABLE (id NUMERIC,importe DECIMAL(18,2))
INSERT INTO @t1
SELECT 10887,NULL,603.2 UNION ALL
SELECT 10887,83.2,NULL UNION ALL
SELECT 10887,520,NULL UNION ALL
SELECT 10888,NULL,21.344 UNION ALL
SELECT 10888,18.40,NULL UNION ALL
SELECT 10888,2.944,NULL
INSERT INTO @t2
SELECT 10887,603.2 UNION ALL
SELECT 10888,150
SELECT id
,SUM(debe) 'Debe'
,SUM(haber) 'Haber'
,(SELECT importe FROM @t2 where id=t1.id) 'Importe'
,CASE WHEN SUM(debe)=SUM(haber) THEN '' ELSE 'not equal' END 'Debe=Haber'
,CASE WHEN (SUM(debe)=SUM(haber) AND (SELECT importe FROM @t2 WHERE id=t1.id)=SUM(debe)) THEN 'Coincidence' ELSE '' END 'Debe=Haber=Importe'
FROM @t1 t1
GROUP BY id
/*
SELECT id
,SUM(debe) 'Debe'
,SUM(haber) 'Haber'
,(SELECT importe FROM @t2 where id=t1.id) 'Importe'
,CASE WHEN SUM(debe)<>SUM(haber) THEN 'not equal' ELSE '' END 'Debe=Haber'
,CASE WHEN (SUM(debe)=SUM(haber) AND (SELECT importe FROM cont WHERE id=t1.id)=SUM(debe)) THEN 'Coincidence' ELSE '' END 'Debe=Haber=Importe'
FROM contd t1
GROUP BY id
*/
下面是一种进行比较并返回一个值的方法,具体取决于匹配的性质。这使用了一个case语句:
select cd.id,
(case when cd.sumdebe <> cd.sumhaber then 'not equals'
when cd.sumdebe = c.importe then 'all same'
else 'mismatch'
end)
from (select id, sum(debe) as sumdebe, sum(haber) as sumhaber
from contd
group by id
) cd left outer join
cont c
on cd.id = c.id;
请在SQLFIDLE中创建架构和数据示例