Результаты сводных / перекрестных таблиц по запросу PHP / SQL - PullRequest
0 голосов
/ 28 февраля 2012

Запуск самой последней версии PHP под самой последней сборкой WAMPserver.

База данных - SQL Server 2005

Вот запрос, который я сейчас выполняю, который работает. Что я хочу сделать, это изменить вывод с:

CorrectionsCount , Employee  , Date    
1                , Joe       , 02/12/2012
31               , Barbara   , 02/13/2012    
12               , Paula     , 02/16/2012

На что-то вроде этого

[EMPLOYEE NAME], 02/12/2012,    02/13/2012,    02/16/2012    
Joe              , 31         , 0              , 0    
Barbara          , 0          , 31             , 0   
Paula            , 0          , 0              , 12

Код:

<?php

// connect to DSN 
$DP2connect = odbc_connect("DB", "USER", "PWORD") or die ("Could not connect to 

server");

$DP2query = "
SELECT SUM(CorrectionsCount),CorrectionUser,
convert(char(10), DateHourCorrected, 120)
FROM ISIImageCorrections
WHERE DateHourCorrected BETWEEN '$theDate1' AND '$theDate2'
GROUP BY CorrectionsCount,CorrectionUser,DateHourCorrected
";


$DP2result2 = odbc_exec($DP2connect, $DP2query);

odbc_result_all($DP2result2, 'id="results"');
?>

$ thedate1 и $ thedate2 - это переменные, помещаемые на эту страницу с помощью средства выбора календаря с другой страницы PHP.

ОБНОВЛЕНИЕ: я попытался запустить функцию COALESCE, описанную ниже, но она генерирует синтаксическую ошибку рядом с ключевым словом «FROM» (второй экземпляр «FROM» в этом выражении). Я правильно ввожу это?

$DP2connect = odbc_connect("dp2_database", "DP2", "DP2Express!") or die ("Could not connect to 

server");

$DP2query = 
"WITH T 
AS(
    SELECT CorrectionUser, CorrectionsCount, DateHourCorrected
    FROM ISIImageCorrections
)
SELECT CorrectionUser, 
       COALESCE([02/12/2012], 0) AS [02/12/2012],
       COALESCE([02/13/2012], 0) AS [02/13/2012],
       COALESCE([02/16/2012], 0) AS [02/16/2012],
FROM T
PIVOT(SUM(CorrectionsCount) FOR [Date] IN([02/12/2012], [02/13/2012], [02/16/2012])) AS P";


$DP2result2 = odbc_exec($DP2connect, $DP2query);

odbc_result_all($DP2result2, 'id="results"');

1 Ответ

0 голосов
/ 28 февраля 2012

Здесь я использую SUM, выберите любую агрегатную функцию на свой вкус:

WITH T AS(
    SELECT Employee, CorrectionsCount, [Date]
    FROM @yourTable
)
SELECT Employee, 
       COALESCE([02/12/2012], 0) AS [02/12/2012],
       COALESCE([02/13/2012], 0) AS [02/13/2012],
       COALESCE([02/16/2012], 0) AS [02/16/2012]
FROM T
PIVOT(SUM(CorrectionsCount) FOR [Date] 
      IN([02/12/2012], [02/13/2012], [02/16/2012])) AS P;
...