Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по запросу / 5 сообщений из 5, страница 1 из 1
30.03.2017, 22:41
    #39430530
top091
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
Добрый вечер.

Имеется таблица, где есть 3 столбца:
user_id - где хранятся id,
code - где хранятся значения 0 или 1,
date - где хранится дата, в зависимости от значения code (0 - on, 1 - off)

У одного юзера может быть значение 0 и значение 1, но 1 может и отсутствовать
Мне надо написать такой запрос, чтобы у меня выдавал:
_________________________
|users_id|---on----|----off---|
---------------------------------
|user_id1|11.23.15|11.23.15|
|user_id2|01.12.14|02.01.15|
|user_id3|06.23.17|--(null)--| - null если в code отсутствует 4 у этого id


Но пока что получается только так
|users_id|---on----|----off---|
---------------------------------
|user_id1|11.23.15|--(null)--|
|user_id1|--(null)--|11.23.15|
|user_id2|01.12.14|--(null)--|
|user_id2|--(null)--|02.01.15|

и т.д. - т.е. он дублирует id пользователя, если у него есть и on и off


Код: sql
1.
2.
3.
4.
select users_id,
        case when code=0 then date end as on,
        case when code=1 then date end as off
from table_name



Как это вместить в одну строку ?
...
Рейтинг: 0 / 0
30.03.2017, 23:57
    #39430554
пивотина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
top091Как это вместить в однукогда несколько в одну - это групповуха.
...
Рейтинг: 0 / 0
31.03.2017, 08:14
    #39430610
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
примерно так

Код: plsql
1.
2.
3.
4.
5.
select users_id,
        max(case when code=0 then date end) as on,
        max(case when code=1 then date end) as off
from table_name
group by users_id
...
Рейтинг: 0 / 0
31.03.2017, 08:33
    #39430617
Или так
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
Dmitry.,

Код: plsql
1.
2.
3.
select t1.users_id, t1.date as on, t2.date as off
from table_name t1 left join table_name t2 
on t1.users_id = t2.users_id and t1.code = 0 and t2.code = 1
...
Рейтинг: 0 / 0
31.03.2017, 10:43
    #39430704
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
Или так,

Или так:

Код: plsql
1.
2.
3.
4.
select * from table_name
pivot (max("date")/*"date" - в кавычках такт как в Oracle имя date зарезервировано и негоже так называть поля*/
for code in (0 as "on", 1 as "off"))
order by user_id
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по запросу / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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