Я пытаюсь заставить таблицу динамического сводного SQL Server работать, что позволяет мне подсчитывать и затем суммировать количество столбцов. Цель сводной таблицы - создать отчет всех дней пребывания людей в городе и общего количества дней (в месяц). Так, например, Person A оставался каждый день в июне - общая сумма будет 30.Person B только начал оставаться 3 июня - общая сумма составит 27 и т.д. Таблица данных состоит только из Name, ArriveDate, DepartDate .. . дни месяца создаются с помощью SQL-запроса.Получить общие данные по SQL Dynamic (Calendar) Сводные таблицы
+------+------------+------------+-------+-------+-------+-----+-------+-------+-------+
| Name | ArriveDate | DepartDate | 06-01 | 06-02 | 06-03 | ... | 06-29 | 06-30 | Total |
+------+------------+------------+-------+-------+-------+-----+-------+-------+-------+
| A | 2014-06-01 | 2014-06-23 | 1 | 1 | 1 | ... | 1 | 1 | 30 |
| B | 2014-06-02 | 2014-06-23 | 0 | 1 | 1 | ... | 1 | 1 | 27 |
| C | 2014-06-02 | 2014-06-23 | 0 | 0 | 0 | ... | 1 | 1 | 16 |
+------+------------+------------+-------+-------+-------+-----+-------+-------+-------+
Вот запрос, я до сих пор:
DROP TABLE #tempDates
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
;WITH cte (datelist, maxdate) AS
(
SELECT MIN(ArriveDate) datelist,
EOMONTH(GETDATE()) AS maxdate
FROM Reservation
UNION ALL
SELECT dateadd(dd, 1, datelist), maxdate
FROM cte
WHERE datelist < maxdate
)
SELECT c.datelist
INTO #tempDates
FROM cte c
SELECT @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(CHAR(10), datelist, 120))
FROM #tempDates
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query = 'SELECT ID,
ArriveDate,
DepartDate,
' + @cols + '
FROM
(
SELECT r.ID,
r.ArriveDate,
r.DepartDate,
d.datelist,
convert(CHAR(10), datelist, 120) PivotDate
FROM
Reservation r
LEFT JOIN
#tempDates d
ON d.datelist BETWEEN rg.ArriveDate AND GETDATE()
) x
pivot
(
COUNT(datelist)
FOR PivotDate IN (' + @cols + ')
) p '
EXECUTE (@query)
Попробуйте поместить свой код в код форматирования блока, это весело! –
спасибо за отзыв! –