这是我上一个问题的后续,但由于我试图简化,我似乎遗漏了一些Daily snapshot table using cte loop
我尝试在dates和employee表之间设置下面的交叉连接。我需要一个根据部门和部门的每日计数,但日期不容易链接,因为日期存储为varchar (这不是我的选择,我不能更改它)。
我现在有了一个日期表,其中包含一个style112 (yyyymmdd)键,我可以将其链接到该表,但在连接过程中似乎出现了故障。
我是如此的接近,但是我真的迷失了!我从来没有使用过字符串日期,也不希望任何人都这样做。
DECLARE @DATESTART AS Date = '20180928';
DECLARE @DATEEND AS Date = '20181031';
WITH Dates AS (
SELECT @DATESTART AS Dte
UNION ALL
SELECT DTE + 1
FROM Dates
WHERE Dte <= @DATEEND )
SELECT
Dt.Dte
,CAST(DTC.Style112 AS VARCHAR)
,Emp.Division_Description
,Emp.Department_Description
,(SELECT
COUNT(*)
FROM ASS_D_EmpMaster_Live E
WHERE
E.[Start_Date] <= CAST(DTC.Style112 AS VARCHAR)
AND (E.Leaving_Date > CAST(DTC.Style112 AS VARCHAR)
OR E.Leaving_Date = '00000000')
) Counts
FROM Dates Dt
LEFT JOIN ASS_C_DateConversions DTC
ON DTC.[Date] = Dt.DtE
CROSS JOIN
(
SELECT DISTINCT
Division_Description
,Department_Description
FROM
ASS_D_EmpMaster_Live e
) Emp
OPTION (MAXRECURSION 1000)所需输出:
日期* Dept3
20180901元人民币,25元人民币,231元人民币,154元人民币。
20180902元人民币,23元人民币,232元人民币,154元人民币。
发布于 2018-11-16 01:58:27
SELECT COUNT(*)
FROM ASS_D_EmpMaster_Live E
WHERE
CAST(E.Start_Date AS DATE) <= Dt.Dte
AND (CAST(E.Leaving_Date AS DATE) > Dt.Dte OR E.Leaving_Date = '00000000')https://stackoverflow.com/questions/53324519
复制相似问题