КАК ОБЪЕДИНИТЬ 2 ЗАПРОСА

У меня есть 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

Определите "это не сработало", возможно, вы ищете UNION ALL

Ilyes 04.07.2019 16:19

Согласно результатам, которые вы хотите, вам не нужно UNION/UNION ALL, я думаю, вы после Коррелированный подзапрос

Ilyes 04.07.2019 16:38
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
68
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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
union all может работать немного лучше, чем union Кроме того, в этом случае, вероятно, все равно не будет дубликатов
GuidoG 04.07.2019 16:27
Ответ принят как подходящий

Кажется, вам нужен 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 во втором запросе. Это позволит запросу использовать преимущества индексов и разделов, если это необходимо.

если столбцы 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

Редактировать - вам может понадобиться LEFT/RIGHT/FULL OUTER Join здесь в зависимости от ваших данных... Хотя это легко изменить...

Другие вопросы по теме