Запрос SQL для получения только строк, соответствующих условию, основанному на двух разделенных столбцах в одной группе - PullRequest
0 голосов
/ 03 июня 2019

Простой запрос SELECT вернет данные, как показано ниже:

Выберите ID, пользователя, страну, TimeLogged из данных

ID     User      Country   TimeLogged
1      Samantha  SCO       10
1      John      UK         5
1      Andrew    NZL       15
2      John      UK        20
3      Mark      UK        10
3      Mark      UK        20
3      Steven    UK        10
3      Andrew    NZL       15
3      Sharon    IRL        5
4      Andrew    NZL       25
4      Michael   AUS        5
5      Jessica   USA       30

Я хотел бы вернуть сумму времени, зарегистрированного для каждого пользователя, сгруппированного по идентификатору. Но только для идентификационных номеров, где оба этих значения Country = UK и User = Andrew включены в их строки.

Таким образом, результат в приведенном выше примере будет

ID     User      Country   TimeLogged
1      John      UK         5
1      Andrew    NZL       15
3      Mark      UK        30
3      Steven    UK        10
3      Andrew    NZL       15

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Сначала вам нужно определить, какие идентификаторы вы собираетесь возвращать

SELECT ID FROM MyTable WHERE Country='UK' 
INTERSECT
SELECT ID FROM MyTable WHERE [User]='Andrew';

и на основании этого вы можете фильтровать для агрегирования ожидаемых строк.

SELECT ID, 
       [User], 
       Country, 
       SUM(Timelogged) as Timelogged 
FROM mytable
WHERE (Country='UK' OR [User]='Andrew')
AND ID IN(  SELECT ID FROM MyTable WHERE Country='UK' 
            INTERSECT
            SELECT ID FROM MyTable WHERE [User]='Andrew')
GROUP BY ID, [User], country;
0 голосов
/ 03 июня 2019

Итак, вы описали, что вам нужно написать почти идеально, но не совсем. Ваша таблица результатов показывает, что вы хотите Страна = Великобритания ИЛИ Пользователь = Андрей, а не И

Вам нужно выбрать и сгруппировать, а затем включить ГДЕ: -

Select ID, User, Country, SUM(Timelogged) as Timelogged from mytable
WHERE Country='UK' OR User='Andrew'
Group by ID, user, country
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...