SQL. Вывести столбец в строку
#1
Отправлено 02.12.2008, 15:23:44
Имеется столбец, который получается в результате несложного запроса из базы
Выглядит он так:
000
010
020
030
Как бы так сделать, чтобы получилось вывести этот столбец в одну строку !?
Типа...
a1 | a2 | a3 | a4
-------------------------
000 | 010 | 020 | 030
Благодарю зараннее !
#2
Отправлено 02.12.2008, 15:37:01
#6
Отправлено 02.12.2008, 18:10:49
Динамический сиквел + временные таблицы...Непонятно. Запрос возвращает в зависимости от определенных условий разное количество записей
Посмотрите справку... execute immediate... create global temporary table...
*Стоп... что значит разное количество записей... я спрашивал про столбцы...
#9
Отправлено 02.12.2008, 18:22:55
Зулкар... Вы с Ораклом работали?При чем тут временные таблицы? Какие динамические запросы, о чем вы? Просто вывод на экран поменять надо, как я понял. Форматирование поменять.
DEN_PR - еще раз, у вас свой клиент, или идущий в поставке ораклового клиента SQL+?
Интересно было бы посмотреть на Пайвотинг средствами Сиквела... если не затруднит...
#11
Отправлено 02.12.2008, 18:25:16
Как вариант...
Тут я по остатку от деления столбцы определял...
Вот оно !!!
Осталось только group by написать, дабы все это вывести а одну строку..и усе !
Чес сказать, что этот способ знал, даже раньше пользовался.
Было что-то типа
select t.tamp_xtr_id, t.line_num_rep, t.tamp_line_num tamp_line_num, max(decode(t.name_pole, 'pole_1', t.importance, NULL)) pole_1, max(decode(t.name_pole, 'pole_2', t.importance, NULL)) pole_2, max(decode(t.name_pole, 'pole_3', t.importance, NULL)) pole_3, max(decode(t.name_pole, 'pole_4', fnd_date.canonical_to_date(t.importance), NULL)) pole_4, max(decode(t.name_pole, 'pole_5',fnd_date.canonical_to_date(t.importance), NULL)) pole_5, max(decode(t.name_pole, 'pole_6', fnd_number.canonical_to_number(t.importance), NULL)) pole_6, max(decode(t.name_pole, 'pole_7', fnd_number.canonical_to_number(t.importance), NULL)) pole_7, max(decode(t.name_pole, 'pole_8', fnd_number.canonical_to_number(t.importance), NULL)) pole_8, max(decode(t.name_pole, 'pole_9', fnd_number.canonical_to_number(t.importance), NULL)) pole_9, max(decode(t.name_pole, 'pole_10', fnd_number.canonical_to_number(t.importance), NULL)) pole_10, max(decode(t.name_pole, 'pole_11', fnd_number.canonical_to_number(t.importance), NULL)) pole_11, max(decode(t.name_pole, 'pole_12', fnd_number.canonical_to_number(t.importance), NULL)) pole_12, max(decode(t.name_pole, 'pole_13', fnd_number.canonical_to_number(t.importance), NULL)) pole_13, max(decode(t.name_pole, 'pole_14', fnd_number.canonical_to_number(t.importance), NULL)) pole_14, max(decode(t.name_pole, 'pole_15', fnd_number.canonical_to_number(t.importance), NULL)) pole_15, max(decode(t.name_pole, 'pole_16', fnd_number.canonical_to_number(t.importance), NULL)) pole_16, max(decode(t.name_pole, 'pole_17', fnd_number.canonical_to_number(t.importance), NULL)) pole_17, max(decode(t.name_pole, 'pole_18', fnd_number.canonical_to_number(t.importance), NULL)) pole_18 from xx_tamp_xtr t where t.tamp_xtr_id=10088 group by t.tamp_xtr_id, t.line_num_rep, t.tamp_line_num
Думал, может что попроще найдется...
Пасиб, massacre !=)
#12
Отправлено 02.12.2008, 18:28:30
Ден... это классический пример из курса по Скул... фундаменталс... вопрос в другом... если у Вас количество столбцов является неконстантой... то соответственно динамик сиквел...Вот оно !!!
Осталось только group by написать, дабы все это вывести а одну строку..и усе !
или попробуйте мультитабле инсерт... а точнее вариацию... пайвотинг инсерт... во временную итаблицу...
Insert first
when condition 1 into table(a)
when condition 2 into table(a)
when condition 3 into table(a)
...
точность синтаксиса не скажу... ща времени нет пробовать запрос...
#13
Отправлено 02.12.2008, 18:31:03
Постоянно. Правда больше с AS и APEX чем с самой базой, но все же...Зулкар... Вы с Ораклом работали?
Никогда не испытывал жгучей потребности выводить текст на консоль эскуэлплюса. Вот честно. Практической пользы никогда не наблюдал.Интересно было бы посмотреть на Пайвотинг средствами Сиквела... если не затруднит...
А то что говорил автор, если я правильно его понял - это формат вывода на консоль. Mysql, c которого начинал все изучение баз, например пользуется для указания формата \G и \g
Сообщение отредактировал Zulkar: 02.12.2008, 18:31:33
#14
Отправлено 02.12.2008, 18:32:11
massacre - по поводу вашего скрина - как я понял, человеку нужнго получить такое, а выводит у него как-то так:
[code=auto:0]
---1-----
a1:1
a2:2
a3:3
a0:4
DEN_PR - я прав?
Рядом
Мне не нужно ничего менять физически, мене требуется лишь отобразить это наоборот. Надобно все это выгрузить в Excel для постоения финансового отчета и сделать это надо в одну строку
Будет некое соответствие типа:
Изначально a1
a2
a3
a4
В результате
a1 a2 a3 a4
__________________________________________
Да,кстати, massacre, еще написать какую нить функцу группирующую типа max или min - все-равно. И тогда будет выведено в одну строку
#15
Отправлено 02.12.2008, 18:38:07
Ден... это классический пример из курса по Скул... фундаменталс... вопрос в другом... если у Вас количество столбцов является неконстантой... то соответственно динамик сиквел...
Вот оно !!!
Осталось только group by написать, дабы все это вывести а одну строку..и усе !
или попробуйте мультитабле инсерт... а точнее вариацию... пайвотинг инсерт... во временную итаблицу...
Insert first
when condition 1 into table(a)
when condition 2 into table(a)
when condition 3 into table(a)
...
точность синтаксиса не скажу... ща времени нет пробовать запрос...
Это точно, количество неизвестно...
испытывал жгучей потребности выводить текст на консоль эскуэлплюса. Вот честно. Практической пользы никогда не наблюдал.
У меня PL\SQL Developer
Найдите 10 отличий !!!
#18
Отправлено 03.12.2008, 09:09:51
Зулкар.. в Айти... понятие форматирования как такового нет... это дело кодеров... задача разработчика в данной задаче мне кажется... это вернуть универсальный набор данных... а уж куда его потом выводить... это десятое дело... хоть в веб... хоть в эксель... хоть в скул плас... хоть в плскулдевелопер...Никогда не испытывал жгучей потребности выводить текст на консоль эскуэлплюса. Вот честно. Практической пользы никогда не наблюдал.
А то что говорил автор, если я правильно его понял - это формат вывода на консоль. Mysql, c которого начинал все изучение баз, например пользуется для указания формата \G и \g
*По крайней мере... меня учили и я учу... что есть такое понятие... независимость данных... в том числе и от интерфейса...
Ну если по логике без разницы... то конечно можно вписать... тут от задачи зависит... то что я написал... в селекте... это просто представление данных в пайвот...Да,кстати, massacre, еще написать какую нить функцу группирующую типа max или min - все-равно. И тогда будет выведено в одну строку
Если столбцов количество неизвестно то только динамик скул...
Приблизительный алгоритм...
1. Получаем параметры...
2. Создаем запрос...
3. тут можно или представление создать или временную таблицу...
4. если временная таблица... заполняем данными...
5. с клиента пишем select * from vwView(ttTable)
Как вариант... тот же самый пайвотинг инсерт...
Тут пример обратный... нормализация данных...
Pivoting INSERT.
1. Suppose you receive a set of sales records from a nonrelational database table, SALES_SOURCE_DATA, in the following format:
EMPLOYEE_ID, WEEK_ID, SALES_MON, SALES_TUE, SALES_WED, SALES_THUR, SALES_FRI
2. You want to store these records in the SALES_INFO table in a more typical relational format:
EMPLOYEE_ID, WEEK, SALES
3. Using a pivoting INSERT, convert the set of sales records from the nonrelational database table to relational format.
Example
INSERT ALL INTO sales_info VALUES (employee_id,week_id,sales_MON) INTO sales_info VALUES (employee_id,week_id,sales_TUE) INTO sales_info VALUES (employee_id,week_id,sales_WED) INTO sales_info VALUES (employee_id,week_id,sales_THUR) INTO sales_info VALUES (employee_id,week_id, sales_FRI) SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE, sales_WED, sales_THUR,sales_FRI FROM sales_source_data;
Легенда... ну ты помнишь Марко... и Тесла с Феррари... так вот... если задача в Оракл... то нахрена все в Скул сервер переводить... к тому ж насколько я понял... это только пара отчетов...А вот в сиквеле от 2005 и аксессе есть готовый пайвот
Количество пользователей, читающих эту тему: 3
пользователей: 0, неизвестных прохожих: 3, скрытых пользователей: 0