如何将从 with 语句派生的 table 连接到更大的查询中
How to join a table which is derived from a with statement into a larger query
我有一个大型查询,它连接了许多不同的 select 查询以创建单个 table,其中一列记录当前库存。我现在需要计算接下来 99 天内的缺货天数,但由于进货库存和需求库存没有每天的记录,我必须创建一个 table 来显示每天的库存变动接下来的 99 天,通过获取当前库存加上每个未来日期的库存变化。为了做到这一点,我创建了下面的独立查询,其中 returns 每天库存变化的正确结果,我现在面临的问题是我无法将此查询加入主查询。
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, 0, @Date) + 1, 0)
END AS myDate,
SKU
FROM
BS_BufferSetting
UNION ALL
SELECT
DATEADD(day, 1, myDate), SKU
FROM
cte
WHERE
DATEADD(day, 1, 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
上面的查询returns结果集是这样的:
Date SKU Amount
----------------------
2020-12-16 BEX -108
2020-12-17 BEX 0
2020-12-18 BEX -12
2020-12-19 BEX 0
将其链接到主查询后,我将需要计算如何添加期初库存(来自主 table)并制定 运行 总数,但这是问题的第二部分。
您可以像这样链接 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, 0, @Date) + 1, 0)
END AS myDate,
SKU
FROM
BS_BufferSetting
UNION ALL
SELECT
DATEADD(day, 1, myDate), SKU
FROM
cte
WHERE
DATEADD(day, 1, 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
我有一个大型查询,它连接了许多不同的 select 查询以创建单个 table,其中一列记录当前库存。我现在需要计算接下来 99 天内的缺货天数,但由于进货库存和需求库存没有每天的记录,我必须创建一个 table 来显示每天的库存变动接下来的 99 天,通过获取当前库存加上每个未来日期的库存变化。为了做到这一点,我创建了下面的独立查询,其中 returns 每天库存变化的正确结果,我现在面临的问题是我无法将此查询加入主查询。
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, 0, @Date) + 1, 0)
END AS myDate,
SKU
FROM
BS_BufferSetting
UNION ALL
SELECT
DATEADD(day, 1, myDate), SKU
FROM
cte
WHERE
DATEADD(day, 1, 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
上面的查询returns结果集是这样的:
Date SKU Amount
----------------------
2020-12-16 BEX -108
2020-12-17 BEX 0
2020-12-18 BEX -12
2020-12-19 BEX 0
将其链接到主查询后,我将需要计算如何添加期初库存(来自主 table)并制定 运行 总数,但这是问题的第二部分。
您可以像这样链接 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, 0, @Date) + 1, 0)
END AS myDate,
SKU
FROM
BS_BufferSetting
UNION ALL
SELECT
DATEADD(day, 1, myDate), SKU
FROM
cte
WHERE
DATEADD(day, 1, 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