Крест, соединяющий стол на себе с графом - PullRequest
1 голос
/ 07 мая 2011

Мне нужно присоединиться к самой таблице при объединении других таблиц и выполнять подсчет для них. Кстати, я использую SQL Server 2008 R2.

Текущее состояние - у меня есть три таблицы MergedSessionsID, EventsSeparated и EventsDescription.

MergedSessionsID, здесь я манипулирую данными - сеансы, по сути, указав название компании и время сеанса (см. Ниже пример данных).

Таблица событий EventsSeparated связывается с MergedSessionsID. По сути, у сеанса может быть одно или несколько событий.

Таблица EventsDescription содержит описание события, например, и то, и другое произошло с пользователем.

Моя цель здесь - понять общее количество событий, произошедших за определенный период времени. Приложение 1 является результатом выполнения запроса ниже.

Однако я также хочу сравнить старые данные с новыми данными и посмотреть, как изменилось количество событий. Так что, как и в Приложении 2, это то, что, как я полагаю, хотелось бы представлению - показывать PreCounter для данных в марте 2210 года и PostCounter для данных в апреле 2210 года.

Каков наилучший способ реализовать это?

SELECT E.[Event]
      ,COUNT(1) AS Counter
      ,ED.[Event Description]
FROM [ShipCompanies].[dbo].MergedSessionsID AS S
    INNER JOIN [ShipCompanies].dbo.EventsSeparated AS E
        ON S.ID = E.ID
    INNER JOIN [ShipCompanies].dbo.EventDescription AS ED
        ON E.[Event] = ED.[Unique ID]
WHERE S.Company = 'SuperSpaceShipOne'
  AND S.[Session Time] BETWEEN '2210-03-02' AND '2210-03-05'
GROUP BY E.[Event], ED.[Event Description]
ORDER BY E.[Event]


SELECT * FROM MergedSessionsID
ID   Company             Session Time
1   SuperSpaceShipOne   2210-03-05
2   SuperSpaceShipOne   2210-03-03 
3   SuperSpaceShipOne   2210-03-02 
4   SuperSpaceShipOne   2210-04-01
5   SuperSpaceShipOne   2210-04-02
6   SuperSpaceShipOne   2210-04-03


SELECT * FROM EventsSeparated
ID  Event
1   2000
2   2001
2   2002
3   2001
4   2002
5   2002
6   2002

SELECT * FROM EventDescription
Unique ID   Event Description
2000        'User Entered the Pod'
2001        'User Initiated Launching Sequence'
2002        'User Error encountered'

Приложение 1. Сводная таблица объединенных результатов (что у меня сейчас)

Event   Counter  Event Description
2000    1        'User Entered the Pod'
2001    2        'User Initiated Launching Sequence'
2002    1        'User Error encountered'

Приложение 2. Сводная таблица объединенных выходных данных (что я хочу получить)

Event  PreCounter   Event Description                  PostCounter
2000   1            'User Entered the Pod'              0
2001   2            'User Initiated Launching Sequence' 0
2002   1            'User Error encountered'            3

1 Ответ

1 голос
/ 07 мая 2011
Select E.[Event]
    , Sum( Case 
           When S.[Session Time] Between '2210-03-02' And '2210-03-05' Then 1 
           Else 0 End ) As PreCounter
    , Sum( Case 
           When S.[Session Time] Between '2210-04-02' And '2210-04-05' Then 1 
           Else 0 End ) As PostCounter
      , ED.[Event Description]
From [ShipCompanies].[dbo].MergedSessionsID As S
    Join [ShipCompanies].dbo.EventsSeparated As E
        On S.ID = E.ID
    Join [ShipCompanies].dbo.EventDescription As ED
        On E.[Event] = ED.[Unique ID]
Where S.Company = 'SuperSpaceShipOne'
    And (
        S.[Session Time] Between '2210-03-02' And '2210-03-05'
        Or S.[Session Time] Between '2210-04-02' And '2210-04-05'
        )
Group By E.[Event], ED.[Event Description]
Order By E.[Event]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...