Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
nixxon Member Откуда: Сообщений: 8 |
здравствуйте, подскажите, пожалуйста, как правильно написать следующий запрос, есть такая таблица Users: user country Language Ivanov Russia RU Ivanov Russia EN Smit England EN Kusko Ukraine RU Kusmo Ukraine EN Abt Germany GN нужно вывести пользователи, которые владеют только каким одним языком: или только русским, или только английским, или только немецким могу ли я написать запрос так: Select user from Users where (Language='RU' and not 'EN' and not 'UA') OR (Language='EN and not 'RU' and not 'GN') OR (Language='GN' and not 'RU' and not 'EN') |
10 июл 17, 17:42 [20630479] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
nixxon,SELECT [user country], [Language] FROM User GROUP BY [user country], [Language] HAVING COUNT([Language]) = 1 |
10 июл 17, 17:45 [20630492] Ответить | Цитировать Сообщить модератору |
nixxon Member Откуда: Сообщений: 8 |
[user country] не знал такого приема, это как бы составной ключ? |
10 июл 17, 17:59 [20630534] Ответить | Цитировать Сообщить модератору |
nixxon Member Откуда: Сообщений: 8 |
и все таки интересует вариант решения как правильно записать, условие "где пользователь владеет только каким одним языком: или только русским, или только английским, или только немецким" Спасибо |
||
10 июл 17, 18:02 [20630542] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
nixxon, Перефразируй условие и переведи дословно на английский: Владеет только одним языком ---> не существует записи о владении другим языком. |
10 июл 17, 18:18 [20630609] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
А TaPaK написал запрос. |
||
10 июл 17, 19:17 [20630725] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
|
||||
10 июл 17, 19:31 [20630758] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
|
||||
10 июл 17, 20:21 [20630862] Ответить | Цитировать Сообщить модератору |
Алексей Куренков Member [заблокирован] Откуда: Москва Сообщений: 567 |
nixxon,select [user] from [users] group by [user] having count(distinct [language])>1 |
11 июл 17, 08:38 [20631767] Ответить | Цитировать Сообщить модератору |
Алексей Куренков Member [заблокирован] Откуда: Москва Сообщений: 567 |
Если идентификатор юзера 2 поля: юзер и кантри, то в селект и группировке 2 поля и указать. Если имя пользователя уникально не зависимо от страны оставить как написал. |
11 июл 17, 08:40 [20631771] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Все почему то забыли условие
Видимо, в базе имеются и другие языки. Тут не совсем точная постановка, в зависимости от нюансов могут быть два варианта: 1) Если человек владеет русским и украинским, то он должен попасть в список (т.к. владеет только одним из вышеперечисленных): select [user] from [users] where Language in ('EN', 'RU', 'GN') group by [user] having count([language])=1 2) Если человек владеет русским и украинским, он не должен попасть в список, т.к. владеет более чем одним языком, и если владеет украинским - тоже не должен - т.к. владеет не языком из списка: select [user] from [users] group by [user] having count(Language) = 1 and sum(case when Language in ('EN', 'RU', 'GN') then 1 else 0 end)=1 |
||||
11 июл 17, 09:46 [20631928] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Minamoto,
можно продолжать гадать и предположить, что ТС хочет просто выбрать людей которые знают только английский(а не один из 3-х), но пока ТС не сможет однозначно изложить, что же ему надо, можете генерить дальше |
||
11 июл 17, 09:52 [20631942] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Ну вы то пропустили даже условие, которое автором было изложено, так что считаю себя вправе внести свои замечания ;) |
||||
11 июл 17, 10:15 [20632072] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
|
||
11 июл 17, 10:19 [20632082] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
|
||||
11 июл 17, 10:41 [20632197] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
|
||||||
11 июл 17, 10:42 [20632210] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Ну-ну, продолжайте. |
||||||||
11 июл 17, 11:07 [20632313] Ответить | Цитировать Сообщить модератору |
nixxon Member Откуда: Сообщений: 8 |
коллеги, попытаюсь более подробно объяснить есть такая таблица Users, состоящая из трех столбцов user, country, langugae: user country language Ivanov Russia RU Ivanov Russia EN Smit England EN Kusko Ukraine RU Kusmo Ukraine EN Abt Germany GN нужно извлечь пользователей, которые владеют только каким одним языком: или только русским, или только английским, или только немецким, при этом надо вывести столбцы: user, language в итоге должно получиться такое user language Smit EN Abt GN могу ли я написать запрос так: Select user from Users where (language='RU' and not 'EN' and not 'UA') OR (Language='EN and not 'RU' and not 'GN') OR (Language='GN' and not 'RU' and not 'EN') т.е. вопрос в том, как написать условие что надо вывести пользователей, которые владеют только каким одним языком: или только русским, или только английским, или только немецким, при этом надо вывести столбцы: user, language Спасибо за участие |
11 июл 17, 14:37 [20633471] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
У вас ВООБЩЕ не получилось. Никаких деталей по сравнению с изначальным постом. И поскольку вопрос у вас один:
То ответ - нет, т.к. в запросе вы выводите один столбец, а хотите получить два. Вариантов решений вам уже накидали, проверяйте, если что-то не устраивает - задавайте уточняющие вопросы. |
||||
11 июл 17, 14:42 [20633524] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Это, конечно, не считая того, что у вас синтаксис не соблюдается и ваш запрос не выполнится. |
||||
11 июл 17, 14:43 [20633530] Ответить | Цитировать Сообщить модератору |
nixxon Member Откуда: Сообщений: 8 |
действительно это была опечатка, извините. Я всё перебрал никак не соображу как все-таки правильно написать условие, подскажите, пожалуйста. как это сделать. |
||||
11 июл 17, 15:11 [20633775] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
nixxon, вам уже предложили варианты - вы их проверили? Обнаружили, что вас в них не устраивает? |
11 июл 17, 15:17 [20633811] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
SELECT [user] FROM [users] WHERE [Language] IN('EN', 'RU', 'GN') GROUP BY [user] HAVING COUNT(*)=1; |
11 июл 17, 15:26 [20633866] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
Всю интригу испортили. Мне бы хотелось посмотреть, как он начал бы оскорблять нас, тупеньких и убогоньких, что мы не можем простейший запрос написать. Ну или ушел бы, хлопнув тредом. Тск, а тут на те, голубое блюдо с золотой каёмочкой. |
||
11 июл 17, 15:37 [20633960] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
|
||||
11 июл 17, 15:41 [20633998] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |