Как я могу повернуть вывод моего запроса T-SQL, чтобы получить эту конкретную таблицу? - PullRequest
0 голосов
/ 18 сентября 2018

Я выполняю запрос T-SQL на SQL Server 2014.Запрос и его выходные данные приведены ниже:

Use MyDatabase
   SELECT 
   ID,
   ArrivalMonth,
   DateOfBirth
   FROM [View1]
   WHERE [ArrivalMonth] between '2017-01-01' and '2018-05-01'

Вывод вышеуказанного запроса выглядит следующим образом (выдержка):

 ID    ArrivalMonth     DateOfBirth
 101   2017-01-01       1974-05-30
 105   2017-05-01       1967-03-05
 125   2017-05-01       NULL
 ...   ...              ...

Мне нужен запрос T-SQL, чтобы дать мнеследующий вывод (основанный на выводе выше):

 ArrivalMonth   Number_Of_Bookings    Number_Of_DOB_Captured
 2017-01-01         130                 110
 2017-02-01          90                  85
 ...                ...                 ...
 2018-05-01         115                  70

Первый столбец - ArrivalMonth.Number_Of_Bookings - количество записей из вышеприведенного запроса.Number_Of_DOB_Captured - это число DateOfBirth, равное NOT NULL.

Я думаю, что запрос Pivot может быть решением, но я не совсем понимаю, как его выполнить в этом сценарии.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы можете присоединиться к календарной таблице, содержащей все месяцы, к вашей текущей таблице, а затем агрегировать:

WITH months AS (
    SELECT '2017-01-01' AS month UNION ALL
    SELECT '2017-02-01' UNION ALL
    ...
    SELECT '2017-12-01'
)

SELECT
    m.month,
    COUNT(*) AS Number_Of_Bookings,
    COUNT(v.DateOfBirth) AS Number_Of_DOB_Captured
FROM months m
LEFT JOIN [View1] v
    ON m.month = v.ArrivalMonth
WHERE
    v.ArrivalMonth BETWEEN '2017-01-01' AND '2018-05-01'
GROUP BY
    m.month;

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

0 голосов
/ 18 сентября 2018

вы можете использовать count(Number_Of_Bookings), count(DateOfBirth) и group by ArrivalMonth

Таким образом, вы подсчитываете количество ненулевых значений для каждого различного ArrivalMonth.

запрос:

Select ArrivalMonth
     , count(Number_Of_Bookings)
     , count(DateOfBirth)
 FROM [View1]
WHERE [ArrivalMonth] between '2017-01-01' and '2018-05-01'
group by ArrivalMonth
...