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

Откуда:
Сообщений: 4
Доброе время суток, форумчане! Встал вот такой вопрос: Есть 2 таблицы:

1: params
id - int(2)               name - text
1 ХВС
2 ГВС
3 Свет

2: const
date_of_data - date       parameter - int(2)          value - text       schet - decimal(11)
21-05-2015 1 32 10254213541
21-05-2015 2 25 10254213541
21-05-2015 3 1524 10254213541
21-06-2015 1 35 10254213541
21-06-2015 2 27 10254213541
21-06-2015 3 1843 10254213541

Таблицы связаны по полю param.id->const.parameter

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

date_of_data     ХВС     ГВС     Свет
21-05-2015 32 25 1524
21-06-2015 35 27 1843

Прошу пардон за корявое объяснение, 1С-ники меня поймут быстро.

К сообщению приложен файл. Размер - 57Kb
9 апр 16, 14:48    [19036446]     Ответить | Цитировать Сообщить модератору
 Re: Строки одной таблицы как колонки для другой  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17715
shishkins2006
Доброе время суток, форумчане! Встал вот такой вопрос: Есть 2 таблицы:

1: params
id - int(2)               name - text
1 ХВС
2 ГВС
3 Свет
2: const
date_of_data - date       parameter - int(2)          value - text       schet - decimal(11)
21-05-2015 1 32 10254213541
21-05-2015 2 25 10254213541
21-05-2015 3 1524 10254213541
21-06-2015 1 35 10254213541
21-06-2015 2 27 10254213541
21-06-2015 3 1843 10254213541
Таблицы связаны по полю param.id->const.parameter

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

date_of_data     ХВС     ГВС     Свет
21-05-2015 32 25 1524
21-06-2015 35 27 1843
Прошу пардон за корявое объяснение, 1С-ники меня поймут быстро.

Картинка с другого сайта.



select date_of_data
max(if(param=1,value,null)) XBC,
max(if(param=2,value,null) GVC,
max(case when param=3 then value else null end) SVET
from lsschet
group by date_of_data


CASE и IF -- работают одинаково, может использовать любую конструкцию.
9 апр 16, 19:51    [19037012]     Ответить | Цитировать Сообщить модератору
 Re: Строки одной таблицы как колонки для другой  [new]
shishkins2006
Member

Откуда:
Сообщений: 4
Спасибо огромное за ответ.

Маленькое уточнение: таблица params - не случайна. В нее могут динамически вводиться ЛЮБЫЕ параметры. Нужно выбрать Все параметры.
12 апр 16, 12:55    [19046777]     Ответить | Цитировать Сообщить модератору
 Re: Строки одной таблицы как колонки для другой  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21483
shishkins2006
В нее могут динамически вводиться ЛЮБЫЕ параметры. Нужно выбрать Все параметры.
В таком случае этой проблемой должен заниматься клиент. Ну или ХП и prepared statement.
12 апр 16, 14:03    [19047276]     Ответить | Цитировать Сообщить модератору
 Re: Строки одной таблицы как колонки для другой  [new]
shishkins2006
Member

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

Ну при чем здесь клиент?
Надо чтобы внутри запроса вот это
max(if(param=1,value,null)) XBC,
max(if(param=2,value,null) GVC,
max(case when param=3 then value else null end) SVET

автоматически генерировалось на основании данных таблицы params, т.е. выводились все параметры, которые есть в таблице params. Вот с этим и загвоздка...
12 апр 16, 14:47    [19047565]     Ответить | Цитировать Сообщить модератору
 Re: Строки одной таблицы как колонки для другой  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21483
Ответ дан - prepared statement в рамках хранимой процедуры.

Вот только что ты потом будешь делать с результатом... в качестве источника данных для других запросов он не подходит, потому как структура не определена. А если для отображения на клиенте - то, как я уже сказал, правильнее пивотить линейные данные именно там.
12 апр 16, 15:03    [19047703]     Ответить | Цитировать Сообщить модератору
 Re: Строки одной таблицы как колонки для другой  [new]
shishkins2006
Member

Откуда:
Сообщений: 4
Akina,
Akina
для отображения на клиенте

Спасибо за наводку. Буду копать хранимые процедуры, хотя для меня пока это - темный лес.
12 апр 16, 15:50    [19048033]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить