SQL Server 2000 сводный запрос - PullRequest
       4

SQL Server 2000 сводный запрос

0 голосов
/ 24 августа 2010

Пожалуйста, прости меня, если на этот вопрос уже был дан ответ.

Я ищу несколько советов о том, как построить сводный или перекрестный запрос.это

Vessel    Date    Inspector
 A      02/05/10    Morris
 B      05/20/10   Clouseau
 A      07/25/10    Gadget

Мне нужно, чтобы результаты выглядели так:

Vessel  Jan   Feb      Mar     April   May   June   July   Aug   Sept   Oct    Nov  Dec
  A           Morris                                Gadget
  B                                  Clouseau

Надеюсь, это имеет смысл.Я надеюсь, что кто-то может дать мне какой-нибудь совет или помощь, чтобы начать меня в этом.

Спасибо

Ответы [ 2 ]

2 голосов
/ 24 августа 2010
Select Vessel
    , Min ( Case When Month([Date]) = 1 Then Inspector End ) As Jan
    , Min ( Case When Month([Date]) = 2 Then Inspector End ) As Feb
    , Min ( Case When Month([Date]) = 3 Then Inspector End ) As Mar
    ...
    , Min ( Case When Month([Date]) = 12 Then Inspector End ) As Dec
From Table
Group By Vessel

Вы должны статически объявить столбцы.Следует отметить, что это будет работать только один год.Если вы ищете динамическую генерацию столбца (месяца), то попытка сделать это в T-SQL не является правильным подходом, так как вы можете сделать это только с каким-то неуклюжим динамическим SQL.Вместо этого вы должны использовать генератор отчетов или компонент среднего уровня для построения набора результатов.

0 голосов
/ 24 августа 2010

Я не думаю, что вам нужен PIVOT для этого - просто создайте 12 подзапросов, по одному на каждый месяц:

SELECT
    Vessel,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=1) as Jan,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=2) as Feb,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=3) as Mar,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=4) as Apr,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=5) as May,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=6) as Jun,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=7) as Jul,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=8) as Aug,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=9) as Sep,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=10) as Oct,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=11) as Nov,
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=12) as Dec
FROM (
    SELECT DISTINCT(Vessel) FROM Stuff
) Tbl

Вы можете сделать эту работу для любого конкретного года, добавив AND YEAR(Date)=2010 (например) до конца каждого из 12 подзапросов.

...