Перейти к содержимому

Фотография

SQL. Вывести столбец в строку


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 40

#1
DEN_PR

DEN_PR
  • Частый гость
  • 66 сообщений
Вот такой вот вопросец...

Имеется столбец, который получается в результате несложного запроса из базы
Выглядит он так:

000
010
020
030

Как бы так сделать, чтобы получилось вывести этот столбец в одну строку !?
Типа...

a1 | a2 | a3 | a4
-------------------------
000 | 010 | 020 | 030

Благодарю зараннее !
  • 0

#2
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
Было бы неплохо указать, что за СУБД и какой клиент к ней используется, может ключик кто и подскажет, в мускуле например \G дает первый вариант, а по умолчанию - второй, в других базах вполне может быть наоборот, а если это своя учебная программа - то наверное надо ее переписать.
  • 0

#3
DEN_PR

DEN_PR
  • Частый гость
  • 66 сообщений
База под ORACLE...больше ничего не знаю ! :(

Клиент 10g
  • 0

#4
megadeath

megadeath

    Фиона - не спать... )))

  • Читатель
  • 19 226 сообщений
Столбцов только 4 или непонятно...

#5
DEN_PR

DEN_PR
  • Частый гость
  • 66 сообщений
Непонятно. Запрос возвращает в зависимости от определенных условий разное количество записей
  • 0

#6
megadeath

megadeath

    Фиона - не спать... )))

  • Читатель
  • 19 226 сообщений

Непонятно. Запрос возвращает в зависимости от определенных условий разное количество записей

Динамический сиквел + временные таблицы...
Посмотрите справку... execute immediate... create global temporary table...

*Стоп... что значит разное количество записей... я спрашивал про столбцы...

#7
megadeath

megadeath

    Фиона - не спать... )))

  • Читатель
  • 19 226 сообщений
Как вариант...
Изображение

Тут я по остатку от деления столбцы определял...

Сообщение отредактировал massacre: 02.12.2008, 18:20:25


#8
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
При чем тут временные таблицы? Какие динамические запросы, о чем вы? Просто вывод на экран поменять надо, как я понял. Форматирование поменять.

DEN_PR - еще раз, у вас свой клиент, или идущий в поставке ораклового клиента SQL+?
  • 0

#9
megadeath

megadeath

    Фиона - не спать... )))

  • Читатель
  • 19 226 сообщений
или... как еще вариант... в 10-ке... Multitable Insert...

При чем тут временные таблицы? Какие динамические запросы, о чем вы? Просто вывод на экран поменять надо, как я понял. Форматирование поменять.

DEN_PR - еще раз, у вас свой клиент, или идущий в поставке ораклового клиента SQL+?

Зулкар... Вы с Ораклом работали?
Интересно было бы посмотреть на Пайвотинг средствами Сиквела... если не затруднит...

#10
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
massacre - по поводу вашего скрина - как я понял, человеку нужнго получить такое, а выводит у него как-то так:
---1-----
a1:1
a2:2
a3:3
a0:4
---2------
a1:5
a2:6
a3:7
a0:8

DEN_PR - я прав?

Сообщение отредактировал Zulkar: 02.12.2008, 18:25:23

  • 0

#11
DEN_PR

DEN_PR
  • Частый гость
  • 66 сообщений

Как вариант...
Изображение

Тут я по остатку от деления столбцы определял...


Вот оно !!!
Осталось только 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 !=)
  • 0

#12
megadeath

megadeath

    Фиона - не спать... )))

  • Читатель
  • 19 226 сообщений

Вот оно !!!
Осталось только group by написать, дабы все это вывести а одну строку..и усе !

Ден... это классический пример из курса по Скул... фундаменталс... вопрос в другом... если у Вас количество столбцов является неконстантой... то соответственно динамик сиквел...
или попробуйте мультитабле инсерт... а точнее вариацию... пайвотинг инсерт... во временную итаблицу...
Insert first
when condition 1 into table(a)
when condition 2 into table(a)
when condition 3 into table(a)
...
точность синтаксиса не скажу... ща времени нет пробовать запрос...

#13
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

Зулкар... Вы с Ораклом работали?

Постоянно. Правда больше с AS и APEX чем с самой базой, но все же...

Интересно было бы посмотреть на Пайвотинг средствами Сиквела... если не затруднит...

Никогда не испытывал жгучей потребности выводить текст на консоль эскуэлплюса. Вот честно. Практической пользы никогда не наблюдал.
А то что говорил автор, если я правильно его понял - это формат вывода на консоль. Mysql, c которого начинал все изучение баз, например пользуется для указания формата \G и \g

Сообщение отредактировал Zulkar: 02.12.2008, 18:31:33

  • 0

#14
DEN_PR

DEN_PR
  • Частый гость
  • 66 сообщений

massacre - по поводу вашего скрина - как я понял, человеку нужнго получить такое, а выводит у него как-то так:
[code=auto:0]
---1-----
a1:1
a2:2
a3:3
a0:4
DEN_PR - я прав?


Рядом :smoke:

Мне не нужно ничего менять физически, мене требуется лишь отобразить это наоборот. Надобно все это выгрузить в Excel для постоения финансового отчета и сделать это надо в одну строку

Будет некое соответствие типа:

Изначально a1
a2
a3
a4

В результате

a1 a2 a3 a4


__________________________________________

Да,кстати, massacre, еще написать какую нить функцу группирующую типа max или min - все-равно. И тогда будет выведено в одну строку
  • 0

#15
DEN_PR

DEN_PR
  • Частый гость
  • 66 сообщений


Вот оно !!!
Осталось только 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 :smoke:
Найдите 10 отличий !!! :laugh:
  • 0

#16
Я Легенда

Я Легенда

    Читатель

  • Завсегдатай
  • 297 сообщений
А вот в сиквеле от 2005 и аксессе есть готовый пайвот :smoke:
  • 0

#17
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

У меня PL\SQL Developer :smoke:
Найдите 10 отличий !!! :)

У меня тоже, как ни странно. :laugh: Между Command Window и SQL+ действительно разницы нет :)
  • 0

#18
megadeath

megadeath

    Фиона - не спать... )))

  • Читатель
  • 19 226 сообщений

Никогда не испытывал жгучей потребности выводить текст на консоль эскуэлплюса. Вот честно. Практической пользы никогда не наблюдал.
А то что говорил автор, если я правильно его понял - это формат вывода на консоль. 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 и аксессе есть готовый пайвот :smoke:

Легенда... ну ты помнишь Марко... и Тесла с Феррари... так вот... если задача в Оракл... то нахрена все в Скул сервер переводить... к тому ж насколько я понял... это только пара отчетов...

#19
DEN_PR

DEN_PR
  • Частый гость
  • 66 сообщений

к тому ж насколько я понял... это только пара отчетов...


Пока один :smoke:
  • 0

#20
megadeath

megadeath

    Фиона - не спать... )))

  • Читатель
  • 19 226 сообщений

Никогда не испытывал жгучей потребности выводить текст на консоль эскуэлплюса. Вот честно. Практической пользы никогда не наблюдал.

Например польза может быть в...
spool c:\temp.txt
:smoke:


Количество пользователей, читающих эту тему: 2

пользователей: 0, неизвестных прохожих: 2, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.