Это следует из моего предыдущего вопроса, но, поскольку я пытался упростить, я, похоже, что-то упустил Таблица ежедневных снимков с использованием цикла cte
Я пытаюсь настроить приведенное ниже перекрестное соединение между датами и таблицей сотрудников. Мне нужен ежедневный подсчет по подразделениям и отделам, но даты не будут легко связаны, поскольку даты хранятся в виде varchar (не мой выбор, я не могу его изменить).
Теперь у меня есть таблица дат, включающая ключ style112 (ггггммдд), который я могу связать с таблицей, но, похоже, где-то в соединениях произошел сбой.
Я так близко, но на самом деле потерян! Мне никогда не приходилось работать со строковыми датами и никому этого не пожелаешь.
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)
Желаемый результат:
Дата Dept1 Dept2 Dept3
20180901 25 231 154
20180902 23 232 154
DTC.Style112
содержит строковые значения в формате ггггммдд, то почемуcast(… as varchar)
? - person Richardissimo   schedule 15.11.2018date
. Какие бывают типыE.[Start_Date]
иE.Leaving_Date
? - person Richardissimo   schedule 15.11.2018Style112
. Используйтеchar(8)
вместоvarchar
. - person shawnt00   schedule 15.11.2018date
, а затем обратно кchar
в нужном вам формате. Я также предполагаю, что ваш подзапрос должен фильтровать отдел и подразделение, чтобы возвращать разные значения. Может быть, это то, что было удалено во время упрощения. - person shawnt00   schedule 15.11.2018