Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перекрестный запрос 
:(
    Опции темы
shefus
Дата 21.12.2011, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



Подскажите, пож., возможно ли сделать перекрестный запрос исходя из следующего:

user posted image
ИТОГОВЫЙ ЗАПРОС
PM MAIL   Вверх
Akina (Online)
Дата 21.12.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Это НЕ перекрёстный запрос.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
shefus
Дата 21.12.2011, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



Хорошо, пусть не перекрестный - все равно: КАК?
PM MAIL   Вверх
Zloxa
Дата 21.12.2011, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



тестовые данные
Код

SQL> with tab1 as (
  2                select 1 id from dual
  3                union all select 2 id from dual
  4                union all select 3 id from dual
  5                union all select 4 id from dual
  6               )
  7   ,tab2 as (
  8                select 1 id, 'A' fr, 'ABC' Zn from dual
  9                union all select 1 id, 'A' fr, 'CDE' Zn from dual
 10                union all select 1 id, 'A' fr, 'CDE' Zn from dual
 11                union all select 1 id, 'B' fr, 'N' Zn from dual
 12                union all select 2 id, 'B' fr, 'K' Zn from dual
 13                union all select 3 id, 'A' fr, 'KLM' Zn from dual
 14             )

запрос
Код

 15  select id
 16         ,max(case when fr = 'A' and rn = 1 then zn end) A
 17         ,max(case when fr = 'A' and rn = 2 then zn end) A
 18         ,max(case when fr = 'B' and rn = 1 then zn end) B
 19  from (
 20    select tab1.id
 21           ,tab2.fr
 22           ,tab2.zn
 23           ,row_number() over (partition by tab2.id,tab2.fr order by zn) rn
 24    from tab1
 25    left join tab2 on tab1.id = tab2.id
 26  )
 27  group by id
 28  ;
 
        ID A   A   B
---------- --- --- ---
         1 ABC CDE N
         2         K
         4         
         3 KLM     




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
shefus
Дата 21.12.2011, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



Цитата(Zloxa @ 21.12.2011,  13:16)
запрос
Код

 15  select id
 16         ,max(case when fr = 'A' and rn = 1 then zn end) A
 17         ,max(case when fr = 'A' and rn = 2 then zn end) A
 18         ,max(case when fr = 'B' and rn = 1 then zn end) B
 19  from (
 20    select tab1.id
 21           ,tab2.fr
 22           ,tab2.zn
 23           ,row_number() over (partition by tab2.id,tab2.fr order by zn) rn
 24    from tab1
 25    left join tab2 on tab1.id = tab2.id
 26  )
 27  group by id
 28  ;
 
        ID A   A   B
---------- --- --- ---
         1 ABC CDE N
         2         K
         4         
         3 KLM     

Не пойдет - IDfr уникальных - более 100 и данные не статические
PM MAIL   Вверх
Zloxa
Дата 21.12.2011, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(shefus @  21.12.2011,  13:47 Найти цитируемый пост)
 данные не статические 

Стройте запрос динамически.

Парадигма SQL подразумевает отсутствие влияния содержимого данных на структуру результата. Т.е. количество столбцов, возвращаемых SQL выражением не может зависть от данных, только количество строк. Некоторые движки, конечно, делают исключения, позволяют динамически транспонировать данные, например Акцесс вроде как умеет. Но чтобы промышленные базы потдерживали такой фунционал, мне - не известно.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
shefus
Дата 22.12.2011, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



Понятно.... Спасибо!
PM MAIL   Вверх
Zloxa
Дата 22.12.2011, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



в 2005м SQL появился еще PIVOT. Делает он то же самое, но имеет более благообразный синтаксис. 

Впрочем, если формировать запрос динамически, мне кажется, куда проще оказывается формировать только лишь select-list предложение, нежели тот же select-list, но и pivot выражение вкупе.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1143 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.