КАК СОЧЕТАТЬ 2 ЗАПРОСА - PullRequest
0 голосов
/ 04 июля 2019

У меня 2 запроса: первый покажет запас, второй - продажи.

--STOCK DEPOT

SELECT GQ_ARTICLE AS 'CODE ARTICLE', 

SUM (GQ_PHYSIQUE)

FROM DISPO

GROUP BY GQ_ARTICLE

--SALES IN 6 MONTHS

--UNION ALL


SELECT GL_CODEARTICLE AS 'CODE ARTICLE',
SUM(GL_QTEFACT)AS 'SOLD QUANTITY'

FROM GCLIGNEARTDIM 

WHERE

DATEADD(M, 6, GP_DATEPIECE) > getdate()

GROUP BY GL_CODEARTICLE

Я пытался объединить ALL для объединения двух запросов, но выполнение заняло много времени. даже я беру всего 1 день.

Любое решение, пожалуйста?

Я хочу такой результат:

GQ_ARTICLE   SUM (GQ_PHYSIQUE)   SUM (GQ_PHYSIQUE)
xxxx         24                  50

Ответы [ 3 ]

2 голосов
/ 04 июля 2019

Объединение двух совершенно не связанных между собой таблиц:

select
    FirstName as Column1,
    LastName as Column2,
    email as Column3,
    null as Column4
from
   stock
union
select
    ProductName as Column1,
    QuantityPerUnit as Column2,
    null as Column3,
    UnitsInStock as Column4
from
    product
0 голосов
/ 04 июля 2019

если столбцы GQ_ARTICLE & GL_CODEARTICLE ссылаются на одно и то же, тогда вы можете просто объединить таблицы и использовать оператор case. например,

SELECT GQ_ARTICLE AS 'CODE ARTICLE', 
SUM (GQ_PHYSIQUE),
SUM(CASE WHEN DATEADD(M, 6, GP_DATEPIECE) > getdate() THEN GL_QTEFACT ELSE 0 END)

FROM DISPO
JOIN GCLIGNEARTDIM
ON GQ_ARTICLE=GL_CODEARTICLE
GROUP BY GQ_ARTICLE

Изменить - вам может понадобиться ВЛЕВО / ВПРАВО / ПОЛНЫЙ ВНЕШНИЙ Присоединяйтесь здесь в зависимости от ваших данных ... Легко изменить хотя ...

0 голосов
/ 04 июля 2019

Вы, похоже, хотите full join, а не union all, потому что хотите получить результаты в одной строке:

SELECT COALESCE(l.CODE_ARTICLE, d.CODE_ARTICLE) as CODE_ARTICLE,
       d.SUM_PHYSIQUE, l.SOLD_QUANTITY       
FROM (SELECT GQ_ARTICLE AS CODE_ARTICLE, SUM(GQ_PHYSIQUE) as SUM_PHYSIQUE
      FROM DISPO
      GROUP BY GQ_ARTICLE
     ) d FULL JOIN
     (SELECT GL_CODEARTICLE AS CODE_ARTICLE, SUM(GL_QTEFACT) AS SOLD_QUANTITY
      FROM GCLIGNEARTDIM 
      WHERE GP_DATEPIECE > DATEADD(month, -6, getdate())
      GROUP BY GL_CODEARTICLE
     ) l
     ON l.CODE_ARTICLE = d.CODE_ARTICLE;

Обратите внимание на изменение условия WHERE во втором запросе.Это позволит при необходимости использовать преимущества индексов и разделов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...