Найти группу счетчиков по идентификатору в SQL Server - PullRequest
0 голосов
/ 03 января 2019

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

Age    RoomId 
-----    ---
 1        1
12        1
 8        1
19        1
3         2
12        2
18        2
21        3

Кроме того, у меня есть таблица свойств, в которой указан максимальный возраст ребенка и максимальный возраст.младенца.Исходя из возраста пассажира, мне нужно разделить их по взрослым, детям и младенцам по каждому из свойств.

Properties структура таблицы

Property Id Maximum_child_age  Maximum_infant_age
-------------------------------------------------
1                11                     2

Желаемый вывод

RoomId  Adult Child Infant PropertyId
--------------------------------
 1       2       1      1      1
 2       2       1      0      1
 3       1       0      0      1

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Перекрестное объединение свойств и последующая условная агрегация.

SELECT count(CASE
               WHEN pa.ages > pr.maximum_child_age THEN
                 1
             END) adult,
       count(CASE
               WHEN pa.ages > pr.maximum_infant_age
                    AND pa.ages <= pr.maximum_child_age THEN
                 1
             END) child,
       count(CASE
               WHEN pa.ages <= pr.maximum_infant_age THEN
                 1
             END) infant,
       pr.propertyid
       FROM passengers pa
            CROSS JOIN properties pr
       GROUP BY pr.propertyid;
0 голосов
/ 03 января 2019

Использовать условную агрегацию:

SELECT 
    SUM(CASE WHEN pas.age > ppt.Maximum_child_age THEN 1 ELSE 0 END) AS Adult,
    SUM(CASE WHEN pas.age BETWEEN Maximum_infant_age AND ppt.Maximum_child_age THEN 1 ELSE 0 END) AS Child,
    SUM(CASE WHEN pas.age < ppt.Maximum_infant_age THEN 1 ELSE 0 END) AS Infant,
    ppt.id
FROM 
    passengers pas
    CROSS JOIN properties ppt
GROUP BY ppt.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...