SQL-запрос должен объединяться как строки - PullRequest
0 голосов
/ 09 мая 2011

У меня есть SQL-запрос следующим образом:

    SELECT
        EVENTTYPEDESCRIPTION,
        YEAR(EVENTSTARTDATE) as 'EVENTYEAR',
        COUNT(PARTICIPANTID) AS 'TOTALPARTICIPANTS'
    FROM WEBPROGRAMPARTICIPANTS
    INNER JOIN WEBPROGRAMS
        ON WEBPROGRAMPARTICIPANTS.PROGRAMCODE = WEBPROGRAMS.PROGRAMCODE
    INNER JOIN WEBEVENTS
        ON WEBPROGRAMS.PROGRAMID = WEBEVENTS.EVENTID
    INNER JOIN WEBEVENTTYPEDESCRIPTIONS
        ON WEBEVENTS.EVENTTYPE = WEBEVENTTYPEDESCRIPTIONS.EVENTTYPE
    WHERE WEBPROGRAMPARTICIPANTS.ACCEPTED = 1
    GROUP BY EVENTTYPEDESCRIPTION, YEAR(EVENTSTARTDATE)
    ORDER BY EVENTTYPEDESCRIPTION, YEAR(EVENTSTARTDATE)

, который возвращает следующие результаты:

EventTypeDescripti  Year    TotalParticipants
Affiliate Workshop  2004    96
Affiliate Workshop  2005    132
Affiliate Workshop  2006    94
Affiliate Workshop  2007    125
Affiliate Workshop  2008    121
Affiliate Workshop  2010    170
Affiliate Workshop  2011    1
IPAM Long Program   2000    59
IPAM Long Program   2001    203
IPAM Long Program   2002    94
IPAM Long Program   2003    182
IPAM Long Program   2004    147
IPAM Long Program   2005    123
IPAM Long Program   2006    99
IPAM Long Program   2007    116
IPAM Long Program   2008    98
IPAM Long Program   2009    127
IPAM Long Program   2010    147
IPAM Long Program   2011    105
IPAM Long Program   2012    14
IPAM Reunion Conference 2002    108
IPAM Reunion Conference 2003    100
IPAM Reunion Conference 2004    98
IPAM Reunion Conference 2005    68

Мой вопрос заключается в том, как мне перестроить запрос, чтобы показать каждую EventTypeDescription, сжатую водна строка и показывает каждый год в виде столбца с соответствующим количеством

Пример:

Description            Year            Year           etc...
Affiliate Workshop     96              132            ....    

Ответы [ 3 ]

1 голос
/ 09 мая 2011

Хорошо, поскольку я не знаю, из какой таблицы идет каждый столбец вашего результата, для этого мне придется использовать временную таблицу.Затем вам понадобится динамический sql, поэтому сначала посмотрите на эту ссылку .Затем попробуйте что-то вроде этого:

DECLARE @Years NVARCHAR(MAX), @Query NVARCHAR(MAX)
SET @Years = ''

SELECT eventtypedescription, 
       YEAR(eventstartdate) AS 'EVENTYEAR', 
       COUNT(participantid) AS 'TOTALPARTICIPANTS' 
INTO #Results
FROM   webprogramparticipants 
INNER JOIN webprograms 
 ON webprogramparticipants.programcode = webprograms.programcode 
INNER JOIN webevents 
 ON webprograms.programid = webevents.eventid 
INNER JOIN webeventtypedescriptions 
 ON webevents.eventtype = webeventtypedescriptions.eventtype 
WHERE  webprogramparticipants.accepted = 1 
GROUP  BY eventtypedescription, YEAR(eventstartdate) 


SELECT @Years = @Years + '[Year ' + CAST(EVENTYEAR AS VARCHAR) +'],'
FROM #Results
GROUP BY EVENTYEAR
ORDER BY EVENTYEAR

SET @Years = LEFT(@Years,LEN(@Years)-1)

SET @Query = '
SELECT *
FROM (  SELECT eventtypedescription, TOTALPARTICIPANTS, ''Year ''+CAST(EVENTYEAR AS VARCHAR) Years
        FROM #Results) T
PIVOT(SUM(TOTALPARTICIPANTS) FOR Years IN ('+@Years+')) AS PT'

EXEC sp_executesql @Query
0 голосов
/ 12 мая 2011

Спасибо всем за ваши усилия.Я запомню пример PIVOT, когда наша база данных будет обновлена ​​до 2008 года. На данный момент, так как мы используем SQL Server 2000, я решил сделать сводку в моем коде c #.Так как способ Icreaetd это я могу передать в любой результат запроса select, и он будет поворачивать его.

0 голосов
/ 09 мая 2011
  1. Используйте курсор для генерации строки, строки которой вам понадобятся
  2. Используйте сводку для сводки данных в столбце EventTypeDescription.Пример на своем пути.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...