Невозможно написать запрос SQL согласно моему требуемому выводу - PullRequest
0 голосов
/ 09 мая 2018

У меня есть две таблицы в базе данных MS Access (Таблица1, Таблица2) с одинаковыми столбцами, а именно Id, PartNo, Nomenclature, Quantity и Wksp. Идентификатор является первичным ключом в них. Идентификатор может быть одинаковым в обеих таблицах. Теперь я хочу написать запрос, чтобы получить вывод, как показано в разделе «Требуемый вывод». Как мне этого добиться?

Table1
+----+--------+--------------+----------+----------+
| Id | PartNo | Nomenclature | Quantity |   Wksp   |
+----+--------+--------------+----------+----------+
|  1 | Part1  | Nomenc1      |        2 |    Wksp1 |
|  2 | Part2  | Nomenc2      |        4 |    Wksp1 |
|  3 | Part3  | Nomenc3      |        6 |    Wksp1 |
|  4 | Part4  | Nomenc4      |        8 |    Wksp1 |
+----+--------+--------------+----------+----------+

Table2
+----+--------+--------------+----------+-------+
| Id | PartNo | Nomenclature | Quantity | Wksp  |
+----+--------+--------------+----------+-------+
|  1 | Part1  | Nomenc1      |        1 | Wksp2 |
|  2 | Part2  | Nomenc2      |        3 | Wksp2 |
|  3 | Part3  | Nomenc3      |        5 | Wksp2 |
|  4 | Part11 | Nomenc11     |        7 | Wksp2 |
|  5 | Part7  | Nomenc7      |        9 | Wksp2 |
+----+--------+--------------+----------+-------+

Требуемый вывод

+----+--------+--------------+-------+-------+
| Id | PartNo | Nomenclature | Wksp1 | Wksp2 |
+----+--------+--------------+-------+-------+
|  1 | Part1  | Nomenc1      |     2 |     1 |
|  2 | Part2  | Nomenc2      |     4 |     3 |
|  3 | Part3  | Nomenc3      |     6 |     5 |
|  4 | Part11 | Nomenc11     |     0 |     7 |
|  5 | Part7  | Nomenc7      |     0 |     9 |
|  6 | Part4  | Nomenc4      |     8 |     0 |
+----+--------+--------------+-------+-------+

Tables and required Output Image

Ответы [ 3 ]

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

Попробуйте это:

select Id , PartNo , Nomenclature, ISNULL(Wksp1,0) Wksp1, ISNULL(Wksp2,0) Wksp2
from 
(
 select  Id , PartNo , Nomenclature ,Wksp,  sum(Quantity) 'count' from Table1
 group by Id , PartNo , Nomenclature,Wksp
 union all
 select  Id , PartNo , Nomenclature ,Wksp,  sum(Quantity) 'count' from Table2
group by Id , PartNo , Nomenclature,Wksp
) src
pivot
(
  sum(count)
  for Wksp in ([Wksp1], [Wksp2])
) P;
0 голосов
/ 09 мая 2018

Сначала создайте запрос для сбора идентификаторов:

SELECT Id
FROM Table1
UNION 
SELECT Id
FROM Tabel2;

Сохраните это как, скажем, TBboth .

Затем используйте это как источник:

SELECT 
    TBboth.Id, 
    Nz(Table1!PartNo, Table2!PartNo) AS PartNo, 
    Nz(Table1!Nomenclature, Table2!Nomenclature) As Nomenclature, 
    Sum(Nz(Table1!Quantity,0)) AS Wksp1, 
    Sum(Nz(Table2!Quantity,0)) AS Wksp2
FROM 
    (TBboth 
    LEFT JOIN 
        TB1 ON TBboth.Id = TB1.Id) 
    LEFT JOIN 
        TB2 ON TBboth.Id = TB2.Id
GROUP BY 
    TBboth.Id, 
    Nz(Table1!PartNo, Table2!PartNo), 
    Nz(Table1!Nomenclature, Table2!Nomenclature);
0 голосов
/ 09 мая 2018

Попробуйте с помощью этого метода, если вы используете MS SQL Server

DECLARE @T1 TABLE
(
    Id INT,
    Part VARCHAR(20),
    Qty INT,
    Wksp VARCHAR(20) DEFAULT('Wksp 1')
)

DECLARE @T2 TABLE
(
    Id INT,
    Part VARCHAR(20),
    Qty INT,
    Wksp VARCHAR(20) DEFAULT('Wksp 2')
)


INSERT INTO @T1
VALUES(1,'Part1',10,'Wksp 1'),(2,'Part2',15,'Wksp 1'),(3,'Part3',12,'Wksp 1')


INSERT INTO @T1
VALUES(1,'Part1',10,'Wksp 2'),(2,'Part2',15,'Wksp 2'),(4,'Part4',20,'Wksp 2')

SELECT
    Id = coalesce(a.id,b.id),
    Part = coalesce(a.Part,b.Part),
    Qty = coalesce(a.Qty,b.Qty),
    Wksp =coalesce(a.Wksp,b.Wksp)
    FROM @T1 A
       FULL JOIN @T2 b
          on a.Id = b.Id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...