Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Преобразование строк в столбцы / 25 сообщений из 32, страница 1 из 2
05.12.2014, 11:23
    #38825928
wainek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Здравствуйте уважаемые! Срочно нужно решить! Покапался в форумах и т.д. но нужного примера не нашел. Работаю с IBExpert. база Firebird 2.5. Имеется представление(view) в таком виде:
POD ZNACH POLYAОтдел_1 1100 Наша ценаОтдел_1 Лот_1 Наименование лотаОтдел_1 Компания_1 Заказчик

Хочу привести его в такой вид:
POD Наша цена Наименование лота ЗаказчикОтдел_1 1100 Лот_1 Компания_1

Может кто сталкивался с такой проблемой. Помогите решить проблему.
...
Рейтинг: 0 / 0
05.12.2014, 11:26
    #38825934
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
wainek,

ищи в гугл по словам "разворот таблицы"! или "поворот таблицы"
или спроси у одноклассников

http://www.sql.ru/forum/435063/razvorot-tablichki
http://forum.ixbt.com/topic.cgi?id=40:3121-2
...
Рейтинг: 0 / 0
05.12.2014, 11:32
    #38825951
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Это называется "транспонирование" или "кросс".
Выполняется отчётником.
Особо упёртые "проктологи" делают в SQL, динамически собираемым запросом.
...
Рейтинг: 0 / 0
05.12.2014, 11:38
    #38825969
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
wainekМожет кто сталкивался с такой проблемой.сталкивались.
wainekПомогите решить проблему.Помочь или сделать вместо?

Твои попытки?

WildSeryОсобо упёртые "проктологи" делают в SQL, динамически собираемым запросом.ну если кол-во столбцов в которые делается разворот статическое и их немного, то и запрос будет статическим и достаточно простым. Собственно примеры постили, в том числе и я.

контекст case+group by
...
Рейтинг: 0 / 0
05.12.2014, 12:17
    #38826038
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Ivan_Pisarevskyконтекст case+group by
Но в любом случае разбросать значения по гриду проще и дешевле на клиенте.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.12.2014, 12:53
    #38826104
wainek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Ivan_Pisarevsky,
Вот мои попытки:
Код: sql
1.
2.
3.
4.
5.
 select pod,
(case polya when 'Наши цены' then znach else null end) as "Наши цены",
(case polya when 'Наименование лота' then znach else null end) as "Наименование лота",
(case polya when 'Заказчик' then znach else null end) as "Заказчик"
from zayav



Результат:

POD Наши цены Наименование лота ЗаказчикОтдел_1 1100 null nullОтдел_1 null Лот_1 nullОтдел_1 null null Компания_1
...
Рейтинг: 0 / 0
05.12.2014, 13:00
    #38826117
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
MAX добавить надо


Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
  pod,
  MAX(case polya when 'Наши цены' then znach else null end) as "Наши цены",
  MAX(case polya when 'Наименование лота' then znach else null end) as "Наименование лота",
  MAX(case polya when 'Заказчик' then znach else null end) as "Заказчик"
from zayav
GROUP BY 1
...
Рейтинг: 0 / 0
05.12.2014, 13:09
    #38826127
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Dimitry SibiryakovНо в любом случае разбросать значения по гриду проще и дешевле на клиенте.
Dimitry Sibiryakovв любом случаеда
Dimitry Sibiryakovпрощене всегда
Dimitry Sibiryakovдешевледля сервера разумеется да, для кодирования не всегда.

Пусть каждый сам решает, как универсальней, как менее нагружать сервер, как менее париться при написании клиента (но не исключено, что иметь проблемы потом).
...
Рейтинг: 0 / 0
05.12.2014, 13:13
    #38826138
wainek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Симонов Денис,

Спасибо теперь одна строка. НО, если у Отдел_1 несколько записей т.е. несколько лотов запрос все равно выводит только одну строку это из за "max" как я понял
...
Рейтинг: 0 / 0
05.12.2014, 13:33
    #38826170
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Ivan_Pisarevskyдля кодирования не всегда.
Да брось, есть такая отличная вещь как ассоциированные массивы. С ними разброс сводится к
одной строке:
Код: plaintext
1.
array[field1->value][field2->value] = field3->value;


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.12.2014, 13:39
    #38826182
wainek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Dimitry Sibiryakov,

а как это использовать? где писать?
...
Рейтинг: 0 / 0
05.12.2014, 13:43
    #38826192
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
wainekгде писать?
В программе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.12.2014, 14:38
    #38826285
wainek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Проблема еще актуальна!)) незнаю уже что рассматривать
...
Рейтинг: 0 / 0
05.12.2014, 14:45
    #38826295
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
wainekесли у Отдел_1 несколько записей т.е. несколько лотов запрос все равно выводит только одну строку это из за "max" как я понял
Код: sql
1.
2.
3.
select pod,lot, <далее как Денис показал>
from ...
group by pod, lot
...
Рейтинг: 0 / 0
05.12.2014, 14:59
    #38826314
wainek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Может я в начале не так объяснил проблему. Конечный результат должен быть таковым:
POD Наша цена Наименование лота ЗаказчикОтдел_1 1100 Лот_1 Компания_1Отдел_1 2200 Лот_2 Компания_3 Отдел_2 5000 Лот_3 Компания_2

Незнаю может я где то не правильно делаю, но вышеперечисленные советы никак не помогают
...
Рейтинг: 0 / 0
05.12.2014, 15:04
    #38826321
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
wainekНезнаю может я где то не правильно делаю, но вышеперечисленные советы никак
не помогают
Значит пришло время уступить рабочее место настоящему программисту.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.12.2014, 15:05
    #38826324
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
хватит ужо народ пугать.
...
Рейтинг: 0 / 0
05.12.2014, 15:06
    #38826325
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
wainekвышеперечисленные советы никак не помогаютэто тебе только кажется.
...
Рейтинг: 0 / 0
05.12.2014, 15:12
    #38826331
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
wainekМожет я в начале не так объяснил проблему. Конечный результат должен быть таковым:
POD Наша цена Наименование лота ЗаказчикОтдел_1 1100 Лот_1 Компания_1Отдел_1 2200 Лот_2 Компания_3 Отдел_2 5000 Лот_3 Компания_2

Незнаю может я где то не правильно делаю, но вышеперечисленные советы никак не помогают
Из тех начальных данных что привел, такое не получить

зы. Получить конечно что-то подобное можно,
и даже иногда оно будет совпадать с ожидаемым
но для однозначного решения данных не хватает
...
Рейтинг: 0 / 0
05.12.2014, 15:38
    #38826360
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
wainekСимонов Денис,

Спасибо теперь одна строка. НО, если у Отдел_1 несколько записей т.е. несколько лотов запрос все равно выводит только одну строку это из за "max" как я понял

значит у тебя структура кривая. Как ты собрался узнать что нужно включить в одну строку, а что в другую?
...
Рейтинг: 0 / 0
05.12.2014, 18:29
    #38826578
TPAKTOPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Симонов Денис,

У вас нету уникальности по лоту, чтоб получить желаемий результат.
PODZNACHPOLYAОтдел_11100Наша ценаОтдел_1Лот_1Наименование лотаОтдел_1Компания_1ЗаказчикОтдел_11300Наша ценаОтдел_1Лот_2Наименование лота_2Отдел_1Компания_3Заказчик_3

И как SQL-у знать, какая цена к какому лоту ?
...
Рейтинг: 0 / 0
05.12.2014, 18:41
    #38826587
wainek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Вот код вьюшки:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR ALTER VIEW ZAYAV(
    POD,
    ZNACH,
    NAZVA)
AS
select dd.name, task_attribute_values.view_value_short, mf.name from task
      left join employertaskids tt on task.id=tt.id_task
      left join employer ee on  tt.id_employer=ee.id
      left join department dd on ee.id_department=dd.id
      left join task_attribute_values on task.id=task_attribute_values.id_task
      left join meta_field mf on task_attribute_values.id_metafield=mf.id
      where (startdate between '01.09.2014' and '10.12.2014')
      and task_attribute_values.id_metafield in(133,134,136,137,146) and (dd.id between '1' and '20')
      group by dd.name, task_attribute_values.view_value_short,  mf.name
;
...
Рейтинг: 0 / 0
05.12.2014, 18:53
    #38826600
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
wainek,

left join везде понатыкан осознано?
...
Рейтинг: 0 / 0
05.12.2014, 18:57
    #38826606
wainek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
Симонов Денис,
да
...
Рейтинг: 0 / 0
05.12.2014, 19:01
    #38826612
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование строк в столбцы
wainek,

т.е. столбец pod может быть null. Замечательно.

Попробуй вот так, хотя ваш запрос конечно чушь.

Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
  pod, NAZVA
  MAX(case polya when 'Наши цены' then znach else null end) as "Наши цены",
  MAX(case polya when 'Наименование лота' then znach else null end) as "Наименование лота",
  MAX(case polya when 'Заказчик' then znach else null end) as "Заказчик"
from zayav
GROUP BY 1, 2
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Преобразование строк в столбцы / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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