Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL server不匹配列_Sql_Sql Server - Fatal编程技术网

SQL server不匹配列

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比较,并在另一列中打印一致 这应该可以做到: 注意:我已经对您实际想要使用的脚本进行了注释,未注释的脚

我正在尝试为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中创建架构和数据示例