|
|
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
Есть запрос SQL (Oracle): SELECT DISTINCT st_user.name as user_fio, st_branch_scope.descr ofice_name, st_crew_scheduling_vw.description job_desription, st_user.phone as user_tel, st_user.email as user_mail, st_crew_scheduling_vw.username as user_login, st_mnu_group_user.mnu_group_Name as user_group, st_mnu_group.mnu_group_des as user_group_description, st_crew_scheduling_vw.job as user_job, st_crew_scheduling_vw.profile as user_profile, DECODE(sm_mnu_adm.mnu_user_type, 'G', 'Групповое меню', 'U', 'Персональное меню', 'A', 'Полное меню')) as pers_menu, DECODE(st_user.login_locked, 'Y', 'Блокировка', 'N', 'Нет блокировки') as user_login_locked FROM st_user LEFT JOIN st_crew_scheduling_vw ON st_crew_scheduling_vw.job = st_user.job LEFT JOIN st_mnu_group_user ON st_mnu_group_user.job_name = st_crew_scheduling_vw.job LEFT JOIN st_branch_scope ON st_crew_scheduling_vw.division = st_branch_scope.scope LEFT JOIN st_mnu_group ON st_mnu_group.mnu_group_name = st_mnu_group_user.mnu_group_name LEFT JOIN sm_mnu_adm ON st_mnu_group.mnu_group_name = sm_mnu_adm.mnu_user OR st_crew_scheduling_vw.job = sm_mnu_adm.mnu_user ORDER BY user_login_locked DESC, user_fio ASC Запрос выводит 2018-08-30_172520.png. Нужно чтобы был анализ если у сущности есть несколько записей в таблице в поле sm_mnu_adm.mnu_user_type сo значениям "G" и "U", то выводить в результат запроса всегда только запись, где есть "U". Поможите!! Всю бошку сломал, в SQL особо не силен, поэтому просьба не отсылать к мудреным первоисточникам... разобраться-разберусь, но запрос нужен срочно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2018, 17:32 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
DracoDier, select * from (select count(1) over(partition by <сущность>) as cnt, sm_mnu_adm.mnu_user_type, ... <тут весь ваш исходный запрос>) v where cnt = 1 or mnu_user_type = 'U' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2018, 18:05 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
Анна, спасибо. Может подскажете еще, где сейчас в синтаксисе запроса ошибка? select * from (select count(1) over(partition by st_user.name) as cnt, sm_mnu_adm.mnu_user_type, (SELECT DISTINCT st_user.name as user_fio, st_branch_scope.descr ofice_name, st_crew_scheduling_vw.description job_desription, st_user.phone as user_tel, st_user.email as user_mail, st_crew_scheduling_vw.username as user_login, st_mnu_group_user.mnu_group_Name as user_group, st_mnu_group.mnu_group_des as user_group_description, st_crew_scheduling_vw.job as user_job, st_crew_scheduling_vw.profile as user_profile, DECODE(sm_mnu_adm.mnu_user_type, 'G', 'Групповое меню', 'U', 'Персональное меню', 'A', 'Полное меню') as pers_menu, DECODE(st_user.login_locked, 'Y', 'Блокировка', 'N', 'Нет блокировки') as user_login_locked FROM st_user LEFT JOIN st_crew_scheduling_vw ON st_crew_scheduling_vw.job = st_user.job LEFT JOIN st_mnu_group_user ON st_mnu_group_user.job_name = st_crew_scheduling_vw.job LEFT JOIN st_branch_scope ON st_crew_scheduling_vw.division = st_branch_scope.scope LEFT JOIN st_mnu_group ON st_mnu_group.mnu_group_name = st_mnu_group_user.mnu_group_name LEFT JOIN sm_mnu_adm ON st_mnu_group.mnu_group_name = sm_mnu_adm.mnu_user OR st_crew_scheduling_vw.job = sm_mnu_adm.mnu_user )) where cnt = 1 or sm_mnu_adm.mnu_user_type = 'U' ORDER BY user_login_locked DESC, user_fio ASC Ругается где скобки - [1]: ORA-00923: FROM keyword not found where expected ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 09:03 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, чутку сложнее сo значениям "G" и "U" причем мне непонятно если есть по одной записи с "G" и "U" то ... ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 09:17 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
Stax, может быть Н-ное количество и тех и тех записей. Просто вывести нужно сотрудников у которых только Групповое меню (1 запись - это я делаю distint'ом), и сотрудников у которых есть Персональное меню, но в случае их, выводить, что у них есть групповое меню не надо, так как это само собой вроде бы как разумеется и выводить только - Персональное меню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 09:46 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
DracoDierАнна, спасибо. Может подскажете еще, где сейчас в синтаксисе запроса ошибка? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Ругается где скобки - [1]: ORA-00923: FROM keyword not found where expected Да могу сказать 1. У Вас 3 слова select и 2 слова from. 2. Полное непонимание как это ДОЛЖНО работать 3. Очень странная постановка задачи, Приведите пример что выводит и что надо вывести (и надеюсь будет Вам счастье, может и сами поймете) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 10:30 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
DracoDier, чутку допилен вариант Анны Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 10:53 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
[quot MaximaXXL]DracoDierАнна, спасибо. Да могу сказать 1. У Вас 3 слова select и 2 слова from. Я это вижу, но от этого мне не становится яснее, где у Анны пропущен FROM, т.к. я SQL учил сам по книжкам и ее выборка для меня на 70% трудно понимаемая абракадабра). [quot MaximaXXL]DracoDierАнна, спасибо. Да могу сказать 2. Полное непонимание как это ДОЛЖНО работать 3. Очень странная постановка задачи, Приведите пример что выводит и что надо вывести (и надеюсь будет Вам счастье, может и сами поймете) На приложенной картинке я показал примерно, что выводится. На словах объяснил 2 раза, что должно быть в конце. Могу более детально если было не понятно: Что есть ФИО ТИП МЕНЮ клиент1 G клиент1 G клиент1 U клиент1 G клиент2 G клиент3 G клиент3 U Что надо клиент1 U клиент2 G клиент3 U ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 11:38 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
StaxDracoDier, чутку допилен вариант Анны [src PLSQL] SQL> ed Wrote file afiedt.buf 1 with t (name,mnu_user_type) as( stax Stax, сорри на построение Wrote file afiedt.buf with t (name,mnu_user_type) as судя по всему это на сервере Oracle делается, у меня привилегии по скромнее, как и инструментарий, кроме SQL Navigatora и Pl/SQL Developera ничего нет. А сам, в силу убогости мои познаний в SQL, я не понимаю что нужно поставить в начале, чтобы это заработало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 11:42 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
DracoDier, магия данных Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 11:43 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. select count(1) over(partition by st_user.name) as cnt из чего селект? после этого: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. должен быть from DracoDierАнна, спасибо. Может подскажете еще, где сейчас в синтаксисе запроса ошибка? select * from (select count(1) over(partition by st_user.name) as cnt, sm_mnu_adm.mnu_user_type, (SELECT DISTINCT st_user.name as user_fio, st_branch_scope.descr ofice_name, st_crew_scheduling_vw.description job_desription, st_user.phone as user_tel, st_user.email as user_mail, st_crew_scheduling_vw.username as user_login, st_mnu_group_user.mnu_group_Name as user_group, st_mnu_group.mnu_group_des as user_group_description, st_crew_scheduling_vw.job as user_job, st_crew_scheduling_vw.profile as user_profile, DECODE(sm_mnu_adm.mnu_user_type, 'G', 'Групповое меню', 'U', 'Персональное меню', 'A', 'Полное меню') as pers_menu, DECODE(st_user.login_locked, 'Y', 'Блокировка', 'N', 'Нет блокировки') as user_login_locked FROM st_user LEFT JOIN st_crew_scheduling_vw ON st_crew_scheduling_vw.job = st_user.job LEFT JOIN st_mnu_group_user ON st_mnu_group_user.job_name = st_crew_scheduling_vw.job LEFT JOIN st_branch_scope ON st_crew_scheduling_vw.division = st_branch_scope.scope LEFT JOIN st_mnu_group ON st_mnu_group.mnu_group_name = st_mnu_group_user.mnu_group_name LEFT JOIN sm_mnu_adm ON st_mnu_group.mnu_group_name = sm_mnu_adm.mnu_user OR st_crew_scheduling_vw.job = sm_mnu_adm.mnu_user )) where cnt = 1 or sm_mnu_adm.mnu_user_type = 'U' ORDER BY user_login_locked DESC, user_fio ASC Ругается где скобки - [1]: ORA-00923: FROM keyword not found where expected ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 11:52 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
А вообще запрос - каша. stax верно подсказал в какую сторону копать. Сделайте набор данных через with и добрые люди всегда помогут. не всегда есть время сэмулировать ваши данные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 11:57 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
DracoDier, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 12:19 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
MossА вообще запрос - каша. stax верно подсказал в какую сторону копать. Сделайте набор данных через with и добрые люди всегда помогут. не всегда есть время сэмулировать ваши данные Да я бы сделал с радостью, но на его запрос лезет ошибка [1]: ORA-00928: missing SELECT keyword он же у него с WITH начинается... Мой запрос: SELECT DISTINCT st_user.name as user_fio, -- st_branch_scope.descr ofice_name, -- st_crew_scheduling_vw.description job_desription, -- st_user.phone as user_tel, -- st_user.email as user_mail, -- st_crew_scheduling_vw.username as user_login, -- st_mnu_group_user.mnu_group_Name as user_group, -- st_mnu_group.mnu_group_des as user_group_description, -- st_crew_scheduling_vw.job as user_job, -- st_crew_scheduling_vw.profile as user_profile, DECODE(sm_mnu_adm.mnu_user_type, 'G', 'Групповое меню', 'U', 'Персональное меню', 'A', 'Полное меню') as pers_menu--, -- DECODE(st_user.login_locked, 'Y', 'Блокировка', -- 'N', 'Нет блокировки') as user_login_locked FROM st_user LEFT JOIN st_crew_scheduling_vw ON st_crew_scheduling_vw.job = st_user.job LEFT JOIN st_mnu_group_user ON st_mnu_group_user.job_name = st_crew_scheduling_vw.job LEFT JOIN st_branch_scope ON st_crew_scheduling_vw.division = st_branch_scope.scope LEFT JOIN st_mnu_group ON st_mnu_group.mnu_group_name = st_mnu_group_user.mnu_group_name LEFT JOIN sm_mnu_adm ON st_mnu_group.mnu_group_name = sm_mnu_adm.mnu_user OR st_crew_scheduling_vw.job = sm_mnu_adm.mnu_user ORDER BY 1,2 --user_login_locked DESC, user_fio ASC Результат его работы: USER_FIO PERS_MENU сотрудник1 Групповое меню сотрудник2 Групповое меню сотрудник2 Персональное меню сотрудник3 Групповое меню сотрудник3 Персональное меню сотрудник4 Групповое меню сотрудник4 Персональное меню сотрудник5 Групповое меню А должно быть: USER_FIO PERS_MENU сотрудник1 Групповое меню сотрудник2 Персональное меню сотрудник3 Персональное меню сотрудник4 Персональное меню сотрудник5 Групповое меню :( уже хочется смайлик убивания об стену поставить :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 12:20 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
DracoDier :( уже хочется смайлик убивания об стену поставить :( что выдает? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 12:30 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
DracoDier, в догонку, если обекты могут быть с кодами без GU (напр только А) то where cnt < 2 or mnu_user_type='U' Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. мой недосмотр .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 12:43 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
DracoDier, Вот мое Вам предложение, на сон грядущий так сказать: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. По хорошему, я не очень понимаю почему Вы не взяли банальный max/min Не очень хочу лезть в Ваши данные, зачем там distinct, но он все подавит Я думаю такой вариант Вам подойдет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2018, 00:19 |
|
||
|
Как в SQL-запросе откинуть 1 строку из 2х по условию...
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, спасибо. Сработало. И отобрало записи правильно. А Distinct там, потому что в таблице одинаковых по содержанию строк может быть 20+. То бишь на каждого сотрудника полностью идентичных по всем полям записей. Кроме Distinct я не очень понимаю чем откинуть лишние. Всем кто пытался помочь, громадное спасибо. Всем удачи :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 09:21 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39696107&tid=1883518]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 283ms |
| total: | 531ms |

| 0 / 0 |
