如何解决如何将从 with 语句派生的表连接到更大的查询中
我有一个大型查询,它连接了许多不同的选择查询,以创建一个表,其中一个列记录当前库存。我现在需要计算接下来 99 天的缺货天数,但是由于入库库存和需求库存没有每天的记录,我必须创建一个表格来显示接下来 99 天内每天的库存变动通过获取当前库存加上每个未来日期的库存变化。为了解决这个问题,我创建了以下独立查询,它返回每天库存变化的正确结果,我现在面临的问题是我无法将此查询加入主查询。
DECLARE @Date date
SET @Date = '2020-12-15'
;WITH cte AS
(
SELECT
CASE
WHEN DATEPART(Day,@Date) = 1 THEN @Date
ELSE DATEADD(day,DATEDIFF(day,@Date) + 1,0)
END AS myDate,SKU
FROM
BS_BufferSetting
UNION ALL
SELECT
DATEADD(day,1,myDate),SKU
FROM
cte
WHERE
DATEADD(day,myDate) <= DATEADD(day,99,@Date)
)
SELECT
myDate AS Date,SKU,ISNULL(Amount_IOP,0) - ISNULL(Amount_DP,0) AS Amount
FROM
CTE
LEFT OUTER JOIN
DP_Demand ON SKU = SKU_DP AND mydate = Date_DP
LEFT OUTER JOIN
IOP_Inbound ON SKU = SKU_IOP AND mydate = Date_IOP
上述查询返回的结果集如下:
Date SKU Amount
----------------------
2020-12-16 BEX -108
2020-12-17 BEX 0
2020-12-18 BEX -12
2020-12-19 BEX 0
一旦我将其链接到主查询,我将需要弄清楚如何添加期初股票(来自主表)并制定一个运行总数,但这是问题的第二部分。
解决方法
您可以像这样链接 CTE:
;with firstcte as
(
select 1 as MyColumn
),AnotherCTEUsingTheFirstOne as
(
select MyColumn from firstcte
)
select * from AnotherCTEUsingTheFirstOne
所以你应该可以;
DECLARE @Date date
SET @Date = '2020-12-15'
;WITH cte AS
(
SELECT
CASE
WHEN DATEPART(Day,@Date) = 1 THEN @Date
ELSE DATEADD(day,DATEDIFF(day,@Date) + 1,0)
END AS myDate,SKU
FROM
BS_BufferSetting
UNION ALL
SELECT
DATEADD(day,1,myDate),SKU
FROM
cte
WHERE
DATEADD(day,myDate) <= DATEADD(day,99,@Date)
),secondCTE As
(
SELECT
myDate AS Date,SKU,ISNULL(Amount_IOP,0) - ISNULL(Amount_DP,0) AS Amount
FROM
CTE
LEFT OUTER JOIN
DP_Demand ON SKU = SKU_DP AND mydate = Date_DP
LEFT OUTER JOIN
IOP_Inbound ON SKU = SKU_IOP AND mydate = Date_IOP
)
SELECT * FROM ATable A INNER JOIN secondCTE B ON A.Col=B.Col
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。