MS SQL срастить взаимосвязанный запрос с with запросом

Есть 2 запроса, оба выполняются отлично, но по отдельности.

Запрос 1:

WITH t1_CTE (t1_Дата, index_Дата)
AS
(
    SELECT [Дата] AS t1_Дата,
           ROW_NUMBER() OVER(ORDER BY Дата ASC) - 1 AS index_Дата
    FROM [DB1].[dbo].[Testing]
    WHERE Дата >= CONCAT(SUBSTRING('2021-08-10', 1, 4), SUBSTRING('2021-08-10', 6, 2), SUBSTRING('2021-08-10', 9, 2)) AND Дата <= CONCAT(SUBSTRING('2021-08-26', 1, 4), SUBSTRING('2021-08-26', 6, 2), SUBSTRING('2021-08-26', 9, 2))
    GROUP BY Дата
)
SELECT t1_Дата AS Select_day
FROM t1_CTE
WHERE index_Дата = 0 --20210810

Дата - хранится в числовом виде, например 20210810. Но в запрос попадает в строковом виде 2021-08-10

Запрос 2:

SELECT IIF([Наименование субъекта] IS NULL, 'Не задано', [Наименование субъекта]) AS Area,
       [Наименование текущего владельца] AS Kontragent,
       SUM([Количество упаковок]) AS cnt,
       [Дата] AS Select_day
FROM [DB1].[dbo].[Testing]
WHERE Дата = '20210810'
AND case when [Наименование субъекта] is null then 'Не задано' else [Наименование субъекта] end in ('Пермский край', 'Московская область')
GROUP BY [Наименование субъекта], [Наименование текущего владельца]
ORDER BY SUM([Количество упаковок]) DESC

В этом запросе нет смысла объяснять функциональность. Нужно лишь в WHERE Дата = подставить Select_day.
Вопрос без создание таблиц и заполнения данных. Хочу лишь понять как возможно их срастить.

Microsoft SQL Server 2012 (SP4-GDR) (KB4583465) - 11.0.7507.2 (X64) Nov 1 2020 00:48:37 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.2 (Build 9200: ) (Hypervisor)

UPDATE
Решил свои образом:

WITH t1_CTE (t1_Дата, index_Дата)
AS
(
    SELECT [Дата] AS t1_Дата,
           ROW_NUMBER() OVER(ORDER BY Дата ASC) - 1 AS index_Дата
    FROM [DB1].[dbo].[Testing]
    WHERE Дата >= CONCAT(SUBSTRING('2021-08-10', 1, 4), SUBSTRING('2021-08-10', 6, 2), SUBSTRING('2021-08-10', 9, 2)) AND Дата <= CONCAT(SUBSTRING('2021-08-26', 1, 4), SUBSTRING('2021-08-26', 6, 2), SUBSTRING('2021-08-26', 9, 2))
    GROUP BY Дата
)
SELECT IIF([Наименование субъекта] IS NULL, 'Не задано', [Наименование субъекта]) AS Area,
       [Наименование текущего владельца] AS Kontragent,
       SUM([Количество упаковок]) AS cnt
FROM [DB1].[dbo].[Testing]
LEFT JOIN t1_CTE ON Дата = t1_Дата 
WHERE Дата = t1_CTE.t1_Дата
AND index_Дата = 0
AND case when [Наименование субъекта] is null then 'Не задано' else [Наименование субъекта] end in ('Пермский край')
GROUP BY [Наименование субъекта], [Наименование текущего владельца]
ORDER BY SUM([Количество упаковок]) DESC

Ответы (1 шт):

Автор решения: Akina

Превращаешь внешний запрос из первого запроса в ещё один CTE, и используешь во втором запросе.

WITH
-- CTE первого запроса 
t1_CTE (t1_Дата, index_Дата)
AS
(
    SELECT [Дата] AS t1_Дата,
           ROW_NUMBER() OVER(ORDER BY Дата ASC) - 1 AS index_Дата
    FROM [DB1].[dbo].[Testing]
    WHERE Дата >= CONCAT(SUBSTRING('2021-08-10', 1, 4), SUBSTRING('2021-08-10', 6, 2), SUBSTRING('2021-08-10', 9, 2)) AND Дата <= CONCAT(SUBSTRING('2021-08-26', 1, 4), SUBSTRING('2021-08-26', 6, 2), SUBSTRING('2021-08-26', 9, 2))
    GROUP BY Дата
),
-- внешний запрос, преобразованный в CTE
query1_cte AS (
SELECT CONCAT(SUBSTRING(CAST(t1_Дата AS nvarchar), 1, 4), '-', SUBSTRING(CAST(t1_Дата AS nvarchar), 5, 2), '-', SUBSTRING(CAST(t1_Дата AS nvarchar), 7, 2)) AS Select_day
FROM t1_CTE
WHERE index_Дата = 0
) 
-- второй запрос
SELECT IIF([Наименование субъекта] IS NULL, 'Не задано', [Наименование субъекта]) AS Area,
       [Наименование текущего владельца] AS Kontragent,
       SUM([Количество упаковок]) AS cnt,
       [Дата] AS Select_day
FROM [DB1].[dbo].[Testing]
-- с использованием второго CTE вместо WHERE с вручную скопированным значением
JOIN query1_cte ON [DB1].[dbo].[Testing].Дата = query1_cte.Select_day
AND case when [Наименование субъекта] is null then 'Не задано' else [Наименование субъекта] end in ('Пермский край', 'Московская область')
GROUP BY [Наименование субъекта], [Наименование текущего владельца]
ORDER BY SUM([Количество упаковок]) DESC
→ Ссылка