Динамические столбцы с использованием Coalesce с PHP и SQL - PullRequest
1 голос
/ 29 февраля 2012

Последний PHP под WAMPserver

SQL Server 2005

Пользователь передает две переменные на мою страницу отчета .php, $ thedate1 и $ thedate2, которые являются начальной и конечной отметкой даты и времени для значений, которые я хочу получить из базы данных. Я объединяю данные и объединяю их с помощью функции SUM, чтобы получить нужный отчет, но не знаю, как включить все дни между диапазонами дат, чтобы они отображались в виде отдельных столбцов в итоговом отчете.

Поэтому, если $ thedate1 = '2012-02-20' и $ thedate2 = '2012-02-28', я хочу иметь столбец для каждого промежуточного дня (включительно), который будет динамически создаваться в итоговом отчете. В настоящее время я должен добавить даты вручную в запрос, но я надеюсь, что есть способ добавить их автоматически.

Есть идеи?

WITH T 
AS(
    SELECT CorrectionUser, CorrectionsCount, 
    DATEADD(dd, DATEDIFF(d, 0, DateHourCorrected), 0) as [DATE]
    FROM ISIImageCorrections
)
SELECT CorrectionUser AS [Employee], 
       COALESCE([2012-02-20], 0) AS [2012-02-20],
       COALESCE([2012-02-21], 0) AS [2012-02-21],
       COALESCE([2012-02-22], 0) AS [2012-02-22]
FROM T
PIVOT(SUM(CorrectionsCount) FOR [Date] IN([2012-02-20], [2012-02-21], [2012-02-22]))
AS P
ORDER BY CorrectionUser

1 Ответ

0 голосов
/ 12 апреля 2012

Очень легкий подход. Надеюсь, я помог:)

if OBJECT_ID('tempdb..#t1') is not null DROP TABLE #t1;
CREATE TABLE #t1 (d date NOT NULL);

DECLARE @start date;
SET @start = '2012-04-05';
DECLARE @end date;
SET @end = '2012-04-25';
WHILE (@start <= @end)
begin
    INSERT INTO #t1 VALUES(DATEADD(day, 1, @start));
    SET @start = DATEADD(day, 1, @start);
end;

SELECT * FROM #t1;
DROP TABLE #t1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...