首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以为SQL中没有出现的订单创建行?

是否有一种方法可以为SQL中没有出现的订单创建行?
EN

Stack Overflow用户
提问于 2020-02-03 10:42:23
回答 3查看 42关注 0票数 1

此查询:

代码语言:javascript
复制
SELECT nettprice
  ,prodgroup
  ,numofitems
  ,duedate
  ,traderid
  ,duestring
FROM db.dbo.v_activesalesorder
WHERE prodgroup IN ( '123', '456', '789')
AND traderid = 'CUST01'

返回这些结果

无论订单是否到期,我需要在SQL查询中添加哪些内容才能为每个duedate的每个产品组生成一行?

例如,我希望W7 Y20看起来像这样:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-03 10:55:37

交叉连接生成所有结果行。然后外部加入您现有的数据。

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2020-02-03 10:46:01

您需要将活动顺序表与prodgroup表和某些日期表交叉连接。

票数 0
EN

Stack Overflow用户

发布于 2020-02-03 10:50:31

您可以使用VALUE() & do LEFT JOIN

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60037564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档