是否有一种方法可以为没有';SQL不会发生这种情况吗?

是否有一种方法可以为没有';SQL不会发生这种情况吗?,sql,tsql,Sql,Tsql,此查询: SELECT nettprice ,prodgroup ,numofitems ,duedate ,traderid ,duestring FROM db.dbo.v_activesalesorder WHERE prodgroup IN ( '123', '456', '789') AND traderid = 'CUST01' 返回这些结果 无论订单是否到期,我都需要在SQL查询中添加哪些内容来为每个duedate的每个prodgroup生成一行 例如,我希

此查询:

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

无论订单是否到期,我都需要在SQL查询中添加哪些内容来为每个duedate的每个prodgroup生成一行

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


您需要将activesalesorder表与prodgroup表和某些日期表交叉联接。

您可以使用
VALUE()
&do
左联接

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;

交叉联接将生成所有结果行。然后连接现有数据

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;

旁注:您可以删除所有
[
]
,可能还有大部分
'
。您可以使用
请求多个产品组,其中prodgroup位于(123,456,789)
。另一个旁注:
duestring
不应该是表中的一列,因为它可以从
duedate
列生成。谢谢,在您选择的DISTINCT中进行了编辑,数据应该是订单吗?是的,我后来更改了名称。对不起,我现在已经更正了。