2017-06-21 58 views
0

我需要总结的第3列,并显示在按日期和ID分组查询 3查询和加入

这是EXI表

+------+------------+----------+ 
|exiID | exiDate | exiavail | 
+------+------------+----------+ 
| 011 | 01/22/2017 | 255.00 | 
+------+------------+----------+ 
| 011 | 01/23/2017 | 45.00 | 
+------+------------+----------+ 
| 012 | 01/23/2017 | 102.00 | 
+------+------------+----------+ 
| 012 | 01/23/2017 | 55.00 | 
+------+------------+----------+ 

这是REC表

+------+------------+----------+ 
|recID | recDate | recreciv | 
+------+------------+----------+ 
| 012 | 01/22/2017 | 15.00 | 
+------+------------+----------+ 
| 011 | 01/23/2017 | 12.00 | 
+------+------------+----------+ 
| 012 | 01/23/2017 | 32.00 | 
+------+------------+----------+ 
| 011 | 01/24/2017 |  9.00 | 
+------+------------+----------+ 

这是SAL表

+------+------------+----------+ 
|salID | salDate | salreciv | 
+------+------------+----------+ 
| 011 | 01/22/2017 | 21.00 | 
+------+------------+----------+ 
| 012 | 01/23/2017 |  7.00 | 
+------+------------+----------+ 
| 012 | 01/23/2017 | 11.00 | 
+------+------------+----------+ 
| 011 | 01/24/2017 |  2.00 | 
+------+------------+----------+ 

查询所需的连接表和SUM exiavail,recreciv,salreciv 分组按日期和编号:( 查询结果必须是这样

+------------+------+----------+----------+----------+ 
|  Date | ID | exiavail | recreciv | salreciv | 
+------------+------+----------+----------+----------+ 
| 01/22/2017 | 011 | 255.00 |  0.00 | 21.00 | 
+------------+------+----------+----------+----------+ 
| 01/22/2017 | 012 |  0.00 | 15.00 |  0.00 | 
+------------+------+----------+----------+----------+ 
| 01/23/2017 | 011 | 45.00 | 12.00 |  0.00 | 
+------------+------+----------+----------+----------+ 
| 01/23/2017 | 012 | 157.00 | 32.00 | 18.00 | 
+------------+------+----------+----------+----------+ 
| 01/24/2017 | 011 |  0.00 |  9.00 |  2.00 | 
+------------+------+----------+----------+----------+ 
| 01/24/2017 | 012 |  0.00 |  0.00 |  0.00 | 
+------------+------+----------+----------+----------+ 
+4

您的尝试在哪里? – FieryCat

+1

您在结果表中显示了编号为12的01/24/2017,但是这个记录不存在于三个表中的任何一个中。如何知道查询显示此记录? –

回答

0

你可以使用JOIN日期和编号 (假设在3个表中的ID匹配)

select 
    a.exiDate as date 
    , a.exiID as id 
    , sum(a.exiavail) exiavail 
    , sum(b.recreciv) recreciv 
    , sum(c.salreciv) salreciv 
from exi as a 
left join rec as b on a.date = b.date and a.exiID = b.recID 
left join sal as c on a.date = c.date and a.exiID = c.salID 
group by a.exiDate, a.exiID 
0

示例数据显示ID和日期对在所有3个表中都不相同。需要所有可能配对的数据集,然后将每个表连接到该数据集并在两个字段中进行复合连接,然后在该查询中进行合计和分组。

UNION查询可以构造所有对数据集。

SELECT exiID AS ID, exiDate AS TxnDate AS Source FROM exi 
UNION SELECT recID, recDate FROM rec 
UNION SELECT salID, salDate FROM sal; 
0

看看这是否有帮助。你将需要更新表名,但我希望这能让你走上正轨。基本上,您将需要总结每个表中的每个值以及按ID和日期分组

if object_id ('TESTING1') IS NOT NULL DROP TABLE TESTING1 
    if object_id ('TESTING2') IS NOT NULL DROP TABLE TESTING2 
    Create table TESTING1 
    (id INT, 
    Date DATETIME, 
     val INT) 

     INSERT INTO dbo.testing1 values ('11', '01/23/2017', '255') 
     INSERT INTO dbo.testing1 values ('11', '01/23/2017', '45') 
     INSERT INTO dbo.testing1 values ('12', '01/22/2017', '102') 
     INSERT INTO dbo.testing1 values ('12', '01/23/2017', '55') 

     Create table TESTING2 
     (id INT, 
     Date DATETIME, 
     val1 INT) 


    INSERT INTO dbo.testing2 values ('12', '01/22/2017', '15') 
    INSERT INTO dbo.testing2 values ('11', '01/23/2017', '12') 
    INSERT INTO dbo.testing2 values ('12', '01/24/2017', '32') 
    INSERT INTO dbo.testing2 values ('11', '01/23/2017', '9') 



    SELECT distinct a.id, a.date, c.table1val, b.table2val 
    from testing1 a 
    join (select id, date, sum(val1) as table2val 
    from dbo.testing2 
    group by id, date) b on b.id = a.id and b.date = a.date 

    join (select id, date, sum(val) as table1val 
    from dbo.testing1 
    group by id, date) c on c.id = a.id and c.date = a.date