Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как в SQL-запросе откинуть 1 строку из 2х по условию... / 18 сообщений из 18, страница 1 из 1
30.08.2018, 17:32
    #39695741
DracoDier
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
Есть запрос 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 особо не силен, поэтому просьба не отсылать к мудреным первоисточникам... разобраться-разберусь, но запрос нужен срочно.
...
Рейтинг: 0 / 0
30.08.2018, 18:05
    #39695766
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
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'
...
Рейтинг: 0 / 0
31.08.2018, 09:03
    #39695956
DracoDier
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
Анна, спасибо.

Может подскажете еще, где сейчас в синтаксисе запроса ошибка?

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
...
Рейтинг: 0 / 0
31.08.2018, 09:17
    #39695965
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
Щукина Анна,

чутку сложнее
сo значениям "G" и "U"

причем мне непонятно если есть по одной записи с "G" и "U" то ...

.....
stax
...
Рейтинг: 0 / 0
31.08.2018, 09:46
    #39695981
DracoDier
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
Stax, может быть Н-ное количество и тех и тех записей.
Просто вывести нужно сотрудников у которых только Групповое меню (1 запись - это я делаю distint'ом), и сотрудников у которых есть Персональное меню, но в случае их, выводить, что у них есть групповое меню не надо, так как это само собой вроде бы как разумеется и выводить только - Персональное меню.
...
Рейтинг: 0 / 0
31.08.2018, 10:30
    #39696013
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
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.
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

Да могу сказать
1. У Вас 3 слова select и 2 слова from.
2. Полное непонимание как это ДОЛЖНО работать
3. Очень странная постановка задачи, Приведите пример что выводит и что надо вывести (и надеюсь будет Вам счастье, может и сами поймете)
...
Рейтинг: 0 / 0
31.08.2018, 10:53
    #39696024
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
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.
SQL> ed
Wrote file afiedt.buf

  1  with t (name,mnu_user_type) as(
  2  select 'stax','G' from dual union all
  3  select 'stax','A' from dual union all
  4  select 'stax','U' from dual union all
  5  select 'stax','G' from dual union all
  6  select 'stax','G' from dual union all
  7  select 'stax','U' from dual union all
  8  select 'Anna','A' from dual union all
  9  select 'Anna','U' from dual union all
 10  select 'Anna','U' from dual union all
 11  select 'Draco','U' from dual union all
 12  select 'Draco','U' from dual union all
 13  select 'Dier','A' from dual union all
 14  select 'Dier','G' from dual
 15  )
 16  select * from (
 17   select
 18    tt.*
 19   ,count(distinct decode(mnu_user_type,'U','U','G','G')) over (partition by name) cnt
 20    from (
 21    select distinct * from t --тут Ваш селект без order by
 22    ) tt
 23   ) ttt
 24  where cnt=1 or mnu_user_type='U'
 25* order by name
SQL> /

NAME  M        CNT
----- - ----------
Anna  U          1
Anna  A          1
Dier  G          1
Dier  A          1
Draco U          1
stax  U          2

6 rows selected.



......
stax
...
Рейтинг: 0 / 0
31.08.2018, 11:38
    #39696083
DracoDier
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
[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
...
Рейтинг: 0 / 0
31.08.2018, 11:42
    #39696087
DracoDier
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
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, я не понимаю что нужно поставить в начале, чтобы это заработало.
...
Рейтинг: 0 / 0
31.08.2018, 11:43
    #39696090
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
DracoDier,

магия данных
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with t (name,mnu_user_type) as(
    select 'stax','G' from dual union all
    select 'stax','A' from dual union all
   select 'stax','U' from dual union all
    select 'stax','G' from dual union all
    select 'stax','G' from dual union all
    select 'stax','U' from dual union all
    select 'Anna','A' from dual union all
   select 'Anna','U' from dual union all
   select 'Anna','U' from dual union all
   select 'Draco','U' from dual union all
   select 'Draco','U' from dual union all
   select 'Dier','A' from dual union all
   select 'Dier','G' from dual)
select name, max(mnu_user_type) from t
group by name
...
Рейтинг: 0 / 0
31.08.2018, 11:52
    #39696098
Moss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
Код: 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 *
  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)
                 --   FROM что-то
                     )
 where cnt = 1
    or sm_mnu_adm.mnu_user_type = 'U'
 ORDER BY user_login_locked DESC, user_fio ASC



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.
(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)


должен быть 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
...
Рейтинг: 0 / 0
31.08.2018, 11:57
    #39696107
Moss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
А вообще запрос - каша.
stax верно подсказал в какую сторону копать.
Сделайте набор данных через with и добрые люди всегда помогут.
не всегда есть время сэмулировать ваши данные
...
Рейтинг: 0 / 0
31.08.2018, 12:19
    #39696143
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
DracoDier,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select * from (
  select
    tt.*
   ,count(distinct decode(mnu_user_type,'U','U','G','G')) over (partition by name) cnt
   from (
      --тут Ваш селект c distinct без order by
   ) tt
  ) ttt
 where cnt=1 or mnu_user_type='U'
order by name --ваш order by



.....
stax
...
Рейтинг: 0 / 0
31.08.2018, 12:20
    #39696145
DracoDier
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
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 Групповое меню

:( уже хочется смайлик убивания об стену поставить :(
...
Рейтинг: 0 / 0
31.08.2018, 12:30
    #39696162
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
DracoDier
:( уже хочется смайлик убивания об стену поставить :(

что выдает?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select * from (
  select
    tt.*
   ,count(distinct decode(mnu_user_type,'U','U','G','G')) over (partition by name) cnt
   from (
      --тут Ваш селект c distinct без order by + ПОЛЕ mnu_user_type (без decode)
   ) tt
  ) ttt
 where cnt=1 or mnu_user_type='U'
order by name --ваш order by



.....
stax
...
Рейтинг: 0 / 0
31.08.2018, 12:43
    #39696179
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
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.
  1  with t (name,mnu_user_type) as(
  2    select 'stax','G' from dual union all
  3    select 'stax','A' from dual union all
  4    select 'stax','U' from dual union all
  5    select 'stax','G' from dual union all
  6    select 'stax','G' from dual union all
  7    select 'stax','U' from dual union all
  8    select 'Anna','A' from dual union all
  9    select 'Anna','U' from dual union all
 10    select 'Anna','U' from dual union all
 11    select 'Draco','U' from dual union all
 12    select 'Draco','U' from dual union all
 13    select 'Dier','A' from dual union all
 14    select 'Dier','A' from dual
 15    )
 16  select * from (
 17    select
 18     tt.*
 19    ,count(distinct decode(mnu_user_type,'U','U','G','G')) over (partition by name) cnt
 20   from (
 21    select distinct * from t --тут Ваш селект без order by
 22    ) tt
 23   ) ttt
 24  where cnt<2 or mnu_user_type='U'
 25* order by name
SQL> /

NAME  M        CNT
----- - ----------
Anna  U          1
Anna  A          1
Dier  A          0
Draco U          1
stax  U          2



мой недосмотр
....
stax
...
Рейтинг: 0 / 0
01.09.2018, 00:19
    #39696523
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
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.
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(case when sm_mnu_adm.mnu_user_type in ('G','U') 
                         then FIRST_VALUE(sm_mnu_adm.mnu_user_type) over (partition by st_user.name order by sm_mnu_adm.mnu_user_type desc)
                         else mnu_user_type 
                    end ,'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



По хорошему, я не очень понимаю почему Вы не взяли банальный max/min
Не очень хочу лезть в Ваши данные, зачем там distinct, но он все подавит
Я думаю такой вариант Вам подойдет
...
Рейтинг: 0 / 0
03.09.2018, 09:21
    #39697002
DracoDier
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в SQL-запросе откинуть 1 строку из 2х по условию...
MaximaXXL, спасибо.
Сработало. И отобрало записи правильно.

А Distinct там, потому что в таблице одинаковых по содержанию строк может быть 20+.
То бишь на каждого сотрудника полностью идентичных по всем полям записей.
Кроме Distinct я не очень понимаю чем откинуть лишние.

Всем кто пытался помочь, громадное спасибо. Всем удачи :)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как в SQL-запросе откинуть 1 строку из 2х по условию... / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]