Правильная работа с функцией sum () и таблицей отношений - PullRequest
0 голосов
/ 25 мая 2018

Я создал следующие 4 таблицы:

CREATE TABLE `Name` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` INTEGER );
insert into `Name` VALUES(1,'test1');
insert into `Name` VALUES(2,'test2');


CREATE TABLE "Table1" ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `nameID` INTEGER, `amnt1` INTEGER, `amnt2` INTEGER, `amnt3` INTEGER, `amnt4` INTEGER, `amnt5` INTEGER, `amnt6` INTEGER, `entryDate` TEXT );
INSERT INTO Table1 VALUES(NULL,1,1,1,1,1,1,1,'2018-04-01');
INSERT INTO Table1 VALUES(NULL,2,1,1,1,1,1,1,'2018-05-01');
INSERT INTO Table1 VALUES(NULL,1,1,1,1,1,1,1,'2018-05-06');

CREATE TABLE "Table2" ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `nameID` INTEGER, `amnt1` INTEGER, `amnt2` INTEGER, `amnt3` INTEGER, `amnt4` INTEGER, `amnt5` INTEGER, `amnt6` INTEGER, `entryDate` TEXT );
INSERT INTO Table2 VALUES(NULL,1,1,1,1,1,1,1,'2018-04-02');
INSERT INTO Table2 VALUES(NULL,1,1,1,1,1,1,1,'2018-05-05');
INSERT INTO Table2 VALUES(NULL,2,2,2,2,2,2,1,'2018-05-06');


CREATE TABLE "Table3" ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `nameID` INTEGER, `amnt1` INTEGER, `amnt2` INTEGER, `amnt3` INTEGER, `amnt4` INTEGER, `amnt5` INTEGER, `amnt6` INTEGER, `entryDate` TEXT );
INSERT INTO Table3 VALUES(NULL,1,1,1,1,1,1,1,'2018-04-02');
INSERT INTO Table3 VALUES(NULL,1,1,1,1,1,1,1,'2018-05-05');

Я пытаюсь добавить данные столбцов Table1, соответствующие столбцам Table2 (например, Table1.amnt1 + Table2.amnt1).Затем добавьте Table3 для суммирования.

Я не опытный администратор базы данных, я пытался:

SELECT sum(amnt1),sum(amnt2),sum(amnt3),sum(amnt4),sum(amnt5),sum(amnt6) 
FROM (select 
      Table1.amnt1+Table2.amnt1 as amnt1,Table1.amnt2+Table2.amnt2 as amnt2,Table1.amnt3+Table2.amnt3 as amnt3,
      Table1.amnt4+Table2.amnt4 as amnt4,Table1.amnt5+Table2.amnt5 as amnt5,Table1.amnt6+Table2.amnt6 as amnt6
      FROM Table1 JOIN Table2 ON Table1.nameID=Table2.nameID
      where Table1.entryDate between '2018-05-01' and '2018-05-20'

      UNION ALL 
      select amnt1,amnt2,amnt3,amnt4,amnt5,amnt6 
      FROM Table3 
      where entryDate between '2018-05-01' and '2018-05-20' )

Это дает неправильный расчет.Я вижу в реляционном подзапросе не используется entryDate.Похоже, мой запрос неверен.

DEMO SQL FIDDLE

1 Ответ

0 голосов
/ 25 мая 2018

Я бы просто расширил UNION ALL часть:

SELECT sum(amnt1),sum(amnt2),sum(amnt3),sum(amnt4),sum(amnt5),sum(amnt6) 
FROM (select amnt1,amnt2,amnt3,amnt4,amnt5,amnt6 
      FROM Table1 
      where entryDate between '2018-05-01' and '2018-05-20'
      UNION ALL
      SELECT amnt1,amnt2,amnt3,amnt4,amnt5,amnt6 
      FROM Table2
      where entryDate between '2018-05-01' and '2018-05-20' 
      UNION ALL 
      select amnt1,amnt2,amnt3,amnt4,amnt5,amnt6 
      FROM Table3 
      where entryDate between '2018-05-01' and '2018-05-20'     
     ) s  

Демонстрация SQLFiddle

РЕДАКТИРОВАТЬ:

что если в каждой таблице есть несколько разных столбцов?Например, в таблице 2 есть amnt1, amnt2, amount7, amnt9.Если имя этих столбцов не существует в Table1 или table3, тогда я хочу получить существующие данные.

Затем вы просто ставите 0 в качестве этого места (здесь пример amt7 доступен только в table2):

SELECT sum(amnt1),sum(amnt2),sum(amnt3),sum(amnt4),sum(amnt5),sum(amnt6),
       sum(amt7) 
FROM (select amnt1,amnt2,amnt3,amnt4,amnt5,amnt6,0 AS amt7
      FROM Table1 
      where entryDate between '2018-05-01' and '2018-05-20'
      UNION ALL
      SELECT amnt1,amnt2,amnt3,amnt4,amnt5,amnt6,amt7
      FROM Table2
      where entryDate between '2018-05-01' and '2018-05-20' 
      UNION ALL 
      select amnt1,amnt2,amnt3,amnt4,amnt5,amnt6,0
      FROM Table3 
      where entryDate between '2018-05-01' and '2018-05-20'     
     ) s  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...