Я пишу этот запрос CTE, и объяснение таково:
WITH TP AS
(select
c.ID, c.PeriodCId, c.PeriodName, c.Status, c.StatusChangeDate, CAST(c.StartDate AS DATE) AS StartDate, c.EndDate,c.PeriodCode,
c.PeriodType, c.ParentCId, c.MarketId, c.ParentId, c.WD, LEFT(CONVERT(varchar, c.StartDate, 112), 6) AS YEARMONTH,
(select count(*) from dTimePeriod c2 where c2.ParentId = c.ID and c2.Status='actv') as #children
from dTimePeriod c
where (MarketId = 7) ),
TP2 AS
( SELECT *
FROM TP
WHERE #children='12' ),
TP3 AS
(SELECT TP.*, CASE WHEN (TP.WD IS NOT NULL) AND (TP.StartDate <= getdate()) AND TP2.ID=TP.ParentId THEN 18 ELSE NULL END AS WorkingDays
FROM TP LEFT JOIN TP2 ON TP2.ID=TP.ParentId)
select * from TP3
order by ID
, и это результат Изображение CTE
У меня есть рекурсивная таблица [dTimePeriod] thisтаблица содержит разные циклы, и каждый цикл содержит разное количество периодов, например: один цикл имеет 8 периодов, другой цикл имеет 12 периодов и т. д. Я хочу, чтобы циклы содержали 12 периодов, для каждого значения периода = 18, а для других периодов цикла - ноль иЕсть некоторые другие условия, но это не проблема.
И когда я помещаю его в куб SSAS, он не работает, потому что куб не понимает CTE, поэтому я попытался найти решение, но это не так.Один из них не может поместить этот CTE в представление и вызвать это представление в кубе, но представление также не работает.поэтому я начинаю писать его как подзапрос, чтобы куб мог его понять.но я застрял, я не могу написать этот CTE в выражении подзапроса
, и это подзапрос, где я застрял
SELECT c.ID, c.PeriodCId, c.PeriodName, c.Status, c.StatusChangeDate, CAST(c.StartDate AS DATE) AS StartDate, c.EndDate,
c.PeriodCode, c.PeriodType, c.ParentCId, c.MarketId, c.ParentId, c.WD,
LEFT(CONVERT(varchar, c.StartDate, 112), 6) AS YEARMONTH,
CASE WHEN (c.WD IS NOT NULL) AND (c.StartDate <= getdate()) THEN 18
WHEN (c.WD IS NOT NULL) AND (c.StartDate > getdate()) THEN NULL ELSE c.WD END AS WorkingDays,
case when (select sub.* from
(select count(*) as children from dTimePeriod c2 where c2.ParentId = c.ID and c2.Status='actv' ) sub ) = 12
then 18 else null end as WWW
FROM dTimePeriod c
WHERE (c.MarketId = 7)