Есть ли способ для меня, чтобы создать строки для заказов, которые не происходят с SQL? - PullRequest
1 голос
/ 03 февраля 2020

Этот запрос:

SELECT nettprice
  ,prodgroup
  ,numofitems
  ,duedate
  ,traderid
  ,duestring
FROM db.dbo.v_activesalesorder
WHERE prodgroup IN ( '123', '456', '789')
AND traderid = 'CUST01'

Возвращает эти результаты

Orders by due week

Что мне нужно добавить к моему SQL запрос на генерацию строки для каждой группы продюсеров для каждого документа независимо от того, должен ли быть заказ?

Например, я бы хотел, чтобы W7 Y20 выглядела так:

Orders and No Orders by due week

Ответы [ 3 ]

1 голос
/ 03 февраля 2020

При перекрестном соединении создаются все строки результатов. Затем внешнее объедините ваши существующие данные.

WITH orders AS
(
  SELECT *
  FROM db.dbo.v_activesalesorder
  WHERE prodgroup IN (123, 456, 789)
  AND traderid = 'CUST01'
)
SELECT
  o.nettprice,
  p.prodgroup,
  COALESCE(o.numofitems, 0) as num_of_items,
  d.duedate, 
  o.traderid
  o.duestring
FROM (SELECT DISTINCT prodgroup FROM orders) p
CROSS JOIN (SELECT DISTINCT duedate FROM orders) d
LEFT JOIN orders o ON o.prodgroup = p.prodgroup AND o.duedate = d.duedate
ORDER BY d.duedate, p.prodgroup;
0 голосов
/ 03 февраля 2020

Вы можете использовать VALUE() & do LEFT JOIN:

SELECT COALESCE(v.nettprice, 0) AS nettprice, vv.prodgroup, COALESCE(V.numofitems, 0) AS numofitems, 
       vv.prodgroup, v.traderid, v.duestring
FROM ( VALUES (123, '2020-02-10'), 
              (456, '2020-02-10'), 
              (789, '2020-02-10') 
     ) vv(prodgroup, DueDate) LEFT JOIN
     [db].[dbo].[v_activesalesorder] v
     ON v.prodgroup = vv.prodgroup AND v.DueDate = vv.DueDate;
0 голосов
/ 03 февраля 2020

Вам необходимо скрестить таблицу activesalesorder с таблицей prodgroup и таблицей дат.

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