powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как в SQL-запросе откинуть 1 строку из 2х по условию...
18 сообщений из 18, страница 1 из 1
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39695741
DracoDier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос 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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39695766
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39695956
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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39695965
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна,

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

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

.....
stax
...
Рейтинг: 0 / 0
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39695981
DracoDier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, может быть Н-ное количество и тех и тех записей.
Просто вывести нужно сотрудников у которых только Групповое меню (1 запись - это я делаю distint'ом), и сотрудников у которых есть Персональное меню, но в случае их, выводить, что у них есть групповое меню не надо, так как это само собой вроде бы как разумеется и выводить только - Персональное меню.
...
Рейтинг: 0 / 0
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696013
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696024
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696083
DracoDier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696087
DracoDier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696090
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696098
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696107
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще запрос - каша.
stax верно подсказал в какую сторону копать.
Сделайте набор данных через with и добрые люди всегда помогут.
не всегда есть время сэмулировать ваши данные
...
Рейтинг: 0 / 0
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696143
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696145
DracoDier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696162
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696179
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39696523
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как в SQL-запросе откинуть 1 строку из 2х по условию...
    #39697002
DracoDier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL, спасибо.
Сработало. И отобрало записи правильно.

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

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


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