是否有一种方法可以为没有';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中进行了编辑,数据应该是订单吗?是的,我后来更改了名称。对不起,我现在已经更正了。