Выберите максимальный столбец из строки - PullRequest
0 голосов
/ 08 апреля 2019

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

Итак, я выбираю людей, сгруппированных по регионам, среднему возрасту и сумме всех видов деятельности. с целью выбора основного вида деятельности из 4. Для региона. Поэтому мои данные возвращаются как

region  number   avgage   a1   a2  a3   a4  needed?
----------------------------------------------------
A        5       45       3    4    1   5     a4
B        4       23       1    8    2   6     a2

SQL

SELECT 
    C.gri,COUNT(A.ID) AS num,
    AVG(CONVERT(INT, ROUND(DATEDIFF(HOUR, dob, GETDATE()) / 8766.0, 0))) AS AveAge,
    SUM(CASE WHEN gender = 'male' THEN 1 ELSE 0 END) AS Male,
    SUM(CASE WHEN gender = 'female' THEN 1 ELSE 0 END) AS Female,
    SUM(CAST(a1 AS INT)) AS a1,
    SUM(CAST(a2 AS INT)) AS a2,
    SUM(CAST(a3 AS INT)) AS a3,
    SUM(CAST(a4 AS INT)) AS a4,
FROM
    profiile A
INNER JOIN 
    city B ON A.city = B.id
INNER JOIN 
    region C ON B.gri = C.id
GROUP BY 
    C.gri

То, что я пытаюсь сделать, - это способ получить столбец needed.

Благодарен за любую помощь, которая может быть оказана.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Вы можете использовать оператор case

CASE
WHEN COALESCE(A1, 0) > COALESCE(A2, 0) AND COALESCE(A1, 0) > COALESCE(A3, 0) AND COALESCE(A1, 0) > COALESCE(A4, 0) THEN 'A1'
WHEN COALESCE(A2, 0) > COALESCE(A3, 0) AND COALESCE(A2, 0) > COALESCE(A4, 0) THEN 'A2'
WHEN COALESCE(A3, 0) > COALESCE(A4, 0) THEN 'A3'
ELSE 'A4' END AS MainActivity

Если вам не нужно беспокоиться о NULL, вы можете избавиться от слияния.Если есть несколько действий с одним и тем же счетом, он вернет последнее действие с максимальным значением

0 голосов
/ 09 апреля 2019

Попробуйте что-то вроде этого:

SELECT *, x.ColumnName
FROM YourQuery
CROSS APPLY (
    SELECT TOP 1 ColumnName
    FROM (
        SELECT 'a1' AS ColumnName, a1 AS TheValue
        UNION ALL SELECT 'a2', a2
        UNION ALL SELECT 'a3', a3
        UNION ALL SELECT 'a4', a4
    ) y
    ORDER BY TheValue DESC
) x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...