Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Проставить group_id для строк  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
Привет всем!

Есть исходные данные:

WITH t AS (
SELECT 1 ID, 1 TYPE_T, 1 NK, 10 NK2, 100 SM FROM DUAL UNION ALL
SELECT 2 ID, 2 TYPE_T, 1 NK, 10 NK2, 100 SM FROM DUAL UNION ALL
SELECT 3 ID, 3 TYPE_T, 1 NK, 10 NK2, 100 SM FROM DUAL UNION ALL
SELECT 4 ID, 1 TYPE_T, 1 NK, 10 NK2, 50 SM FROM DUAL UNION ALL
SELECT 5 ID, 1 TYPE_T, 1 NK, 10 NK2, 50 SM FROM DUAL UNION ALL
SELECT 6 ID, 2 TYPE_T, 1 NK, 10 NK2, 100 SM FROM DUAL UNION ALL
SELECT 7 ID, 3 TYPE_T, 1 NK, 10 NK2, 100 SM FROM DUAL)

Необходимо получить следующее:

GRP_ID ID TYPE_T SM SM_tp_2 SM_tp_3
111100100 100
24150100 100
25150100 100


То есть выделить группы: от строки с типом 1 до строки с таким же типом 1, а остальные строки транспонировать в столбцы.

На данный момент, вся проблема у меня заключается в том, что это надо сделать на чистом SQL, так как мне это надо для SQL Server.
5 май 11, 17:25    [10612000]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
Петрушка
Member

Откуда:
Сообщений: 139
почему тогда ветка оракл?
5 май 11, 17:38    [10612139]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
Петрушка,

Потому что она мне роднее :) А с SQL Server сейчас происходит интеграция, да и версия SQL Server 2000 :(
5 май 11, 17:39    [10612154]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
Петрушка
Member

Откуда:
Сообщений: 139
и мы должны в ветке оракла гадать, что есть а чего нет в SQL Server 2000?
5 май 11, 17:43    [10612180]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
Петрушка,

Нет. Это у Вас вызывает такое раздражение? Я вроде написал, что хотелось бы понять, как это сделать на чистом sql, этого недостаточно? Это я уже обосновал, зачем это надо на чистом sql.
5 май 11, 17:46    [10612209]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 19702
xymbo
с SQL Server сейчас происходит интеграция, да и версия SQL Server 2000 :(

Все-таки лучше спросить в профильной ветке.
Как и oracle, SQLServer имеет свои уникальные особенности. Не надо искать "чистого" sql там, где можно применить специализированный аппарат.
5 май 11, 18:34    [10612642]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
andrey_anonymous,

Хорошо, создал там ветку. Почему ищу чистый, потому что мне потом нужно переложить логику запроса на ETL инструмент.
5 май 11, 18:40    [10612670]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 19702
xymbo
переложить логику запроса на ETL инструмент.

...забавно.
ETL-инструменты обычно имеют собственные уникальные возможности по манипуляции данными.
5 май 11, 18:59    [10612735]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
andrey_anonymous,

Да, имеют, но для такого случая к сожалению лично я не нашел.
5 май 11, 19:04    [10612755]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
отборный очищенный SQL
Guest
}{умбо,

1) Ищи ветку форума "чистый sql" + sql 2000 + ETL-инструмент.
2) Попроси своих коллег помочь дать постановку твоей задачи, видимо сам ты пока не можешь, ибо исходя из твоего примера не понятно, как транспонируется таблица: строк с типом 1 у тебя 3, а с типами 2 и 3 по 2.
5 май 11, 19:09    [10612770]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
отборный очищенный SQL,

:)

В общем набросал я запрос, получил необходимые мне ID группы, запрос такой:

WITH t AS (
SELECT 1 ID, 1 TYPE_T, 1 NK, 10 NK2, 100 SM FROM DUAL UNION ALL
SELECT 2 ID, 2 TYPE_T, 1 NK, 10 NK2, 100 SM FROM DUAL UNION ALL
SELECT 3 ID, 3 TYPE_T, 1 NK, 10 NK2, 100 SM FROM DUAL UNION ALL
SELECT 4 ID, 1 TYPE_T, 1 NK, 10 NK2, 50 SM FROM DUAL UNION ALL
SELECT 5 ID, 1 TYPE_T, 1 NK, 10 NK2, 50 SM FROM DUAL UNION ALL
SELECT 6 ID, 2 TYPE_T, 1 NK, 10 NK2, 100 SM FROM DUAL UNION ALL
SELECT 7 ID, 3 TYPE_T, 1 NK, 10 NK2, 100 SM FROM DUAL UNION ALL
SELECT 8 ID, 1 TYPE_T, 1 NK, 10 NK2, 10 SM FROM DUAL UNION ALL
SELECT 9 ID, 1 TYPE_T, 1 NK, 10 NK2, 20 SM FROM DUAL UNION ALL
SELECT 10 ID, 2 TYPE_T, 1 NK, 10 NK2, 30 SM FROM DUAL UNION ALL
SELECT 11 ID, 3 TYPE_T, 1 NK, 10 NK2, 30 SM FROM DUAL)
select min(tp2.id) tp2_id, min(tp3.id) tp3_id, t.*
from t,
  (select * from t where type_t = 2) tp2,
  (select * from t where type_t = 3) tp3
where t.type_t = 1
  and t.nk = tp2.nk
  and t.nk2 = tp2.nk2
  and t.id < tp2.id
  and t.nk = tp3.nk
  and t.nk2 = tp3.nk2
  and t.id < tp3.id 
group by t.id, t.type_t, t.nk, t.nk2, t.sm

Как раз транспонироваться должны строки только с типами 2 и 3. И в данном запросе, я выделил для каждой записи с типом 1, какие ей соответствуют записи с типами 2 и 3.

P.S. Что-то под вечер я уже плохо соображал, оказалось, все просто. Спасибо всем!
5 май 11, 19:24    [10612833]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
-2-
Member

Откуда:
Сообщений: 15330
xyюmbo
В общем набросал я ...
Однако за время постановки, задача успела поменяться.
5 май 11, 19:31    [10612852]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
-2-,

Вы насчет транспонирования? Самое главное было для меня выделить ID групп, а все остальное уже в ETL сделаю.
5 май 11, 19:34    [10612868]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 19702
xymbo
отборный очищенный SQL

Самое смешное, что это не есть "чистый SQL".
xymbo, Вы безнадежно испорчены проприетарным диалектом oracle...
5 май 11, 19:38    [10612886]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
andrey_anonymous,

))) Да ладно насчет определения тестовых данных придираться.
5 май 11, 19:43    [10612905]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
-2-
Member

Откуда:
Сообщений: 15330
xymbo,

неявный джоин и алиасы без AS не MSSQL-style
5 май 11, 19:44    [10612909]     Ответить | Цитировать Сообщить модератору
 Re: Проставить group_id для строк  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
-2-,

Но все равно прокатывает на MSSQL :) Даже без этого :)
5 май 11, 19:46    [10612915]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить