Вам нужно предложение WITH
, потому что вам нужен рекурсивный запрос. Предложение WITH
нельзя переместить в другое место в запросе на сервере SQL. Это ограничение указывает c на SQL Сервер, поэтому это, например, невозможно:
select *
from ( with x as (select 1 as col) select * from x ) t;
Предложение WITH
является произвольным c представлением. Следовательно, единственный вариант, который я вижу для SQL Server, - это сделать это обычным представлением:
CREATE VIEW view_products AS
WITH temp_Parent_ID (Parent_productgroup_id, Productgroup_id) AS
(
SELECT
Parent_productgroup_id, Productgroup_id
FROM
VW_PRODUCTGROUP_HIERARCHY
WHERE
Productgroup_id = 26976
UNION ALL
SELECT
VW.Parent_productgroup_id, VW.Productgroup_id
FROM
VW_PRODUCTGROUP_HIERARCHY VW
INNER JOIN
temp_Parent_ID temp ON VW.Parent_productgroup_id = temp.Productgroup_id
)
select * from temp_Parent_ID;
А затем использовать это представление в вашем запросе:
SELECT
COUNT(ae.element_ID)
FROM
view_products
INNER JOIN
VW_PRODUCTS_HIERARCHY VW ON view_products.Productgroup_id = VW.PRODUCTGROUP_ID
INNER JOIN
VW_PRODUCTS_ASSIGNED_E ae ON VW.PRODUCTVARIANT_ID = ae.PRODUCT_ID
INNER JOIN
VW_CATEGORY_ELEMENTS ce ON ae.ELEMENT_ID = ce.ELEMENT_ID
WHERE
ce.CATEGORY_MASTER_NAME LIKE 'Technische Zeichnung (DWG)'
AND ce.CATEGORY_LANGUAGE LIKE 'da'