Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2009, 09:49   #1
span4
Пользователь
 
Регистрация: 04.04.2009
Сообщений: 33
По умолчанию Динамический запрос

Подскажите плз, каким запросом ( думаю что скорее всего динамическим с exec ('select ..') можно это выполнить. Мне надо из таблицы типа:

Магазин 1 | Товар 1 | Остаток |
Магазин 1 | Товар 2| Остаток |
……. ………. …………
Магазин 1 | Товар 24 | Остаток |
Магазин 2 | Товар 1 | Остаток |
Магазин 2 | Товар 2 | Остаток |
…… …… …….
Магазин 2 | Товар 35| Остаток |
.
.
.
.
.
Магазин n | Товар 1| Остаток |
Магазин n | Товар 2| Остаток |
........
Магазин n | Товар 34| Остаток |

Сделать таблицу, типа :

Товар | Остаток Магазин 1| Остаток Магазин 2|

Последний раз редактировалось span4; 19.05.2009 в 10:46.
span4 вне форума Ответить с цитированием
Старый 19.05.2009, 11:06   #2
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
По умолчанию

Если я правильно поняла вопрос,то вот:
Код:
SELECT z.tovar, sum(z.ostatok_mag1) as ostatok_mag1, sum(z.ostatok_mag2) as ostatok_mag2 FROM (
SELECT tovar, CASE ostatok WHEN magazin='Магазин 1' THEN Ostatok ELSE 0 END AS ostatok_mag1,CASE ostatok WHEN magazin='Магазин 2' THEN Ostatok ELSE 0 END AS ostatok_mag2) z
GROUP BY tovar
Никому не поставить нас на колени! Мы лежали и будем лежать!
Rekky вне форума Ответить с цитированием
Старый 19.05.2009, 11:42   #3
span4
Пользователь
 
Регистрация: 04.04.2009
Сообщений: 33
По умолчанию

не.. есть таблица с полями: id_mag, id_tovar, ostatok

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

id_tovar, ost_mag1,...,osr_magn
span4 вне форума Ответить с цитированием
Старый 19.05.2009, 11:49   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а магазинов реально 2 или все-таки не ограниченно двумя(например, может варьироваться от 2 до 10)?
Цитата:
Магазин n
soleil@mmc вне форума Ответить с цитированием
Старый 19.05.2009, 11:51   #5
span4
Пользователь
 
Регистрация: 04.04.2009
Сообщений: 33
По умолчанию

магазинов может быть неограниченное кол-во, может три, может десять. Товаров тоже.
span4 вне форума Ответить с цитированием
Старый 19.05.2009, 12:42   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

имхо в случае неограниченного кол-ва магазинов одним запросом никак
это же получается кросс-табовый отчет
здесь нужно 2 запроса: первый получает список магазинов
Код:
select id_mag
from your_table
group by id_mag
второй уже дергает остаток для каждой комбинации товар-магазин
если это все выводить в отчет, то это все вполне легко реализуется да пусть на том же ФастРепе

З.Ы.: в некоторых случаях, выгоднее создать временную таблицу для хранения полученных (рассчитанных) остатков за период - чтобы лишний раз не нагружать сервак и тогда просто прикидывают возможный максимум магазинов с запасом и создают соответствующее кол-во столбцов под их остатки
soleil@mmc вне форума Ответить с цитированием
Старый 19.05.2009, 13:36   #7
span4
Пользователь
 
Регистрация: 04.04.2009
Сообщений: 33
По умолчанию

это понятно, но как сделать, чтоб он автоматически сам все это делал, независио от кол-ва магазинов, и результирующая таблица была в той форме, которая мне нужна...
span4 вне форума Ответить с цитированием
Старый 19.05.2009, 13:58   #8
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

еще раз объясняю
реши для себя вопрос - "что я буду делать с этими данными дальше?"
отсюда будет и способ решения:
1) "в отчет" один вариант - там колонки будут созданы динамически по первому запросу (самим отчетом), строчки прирастут
2) "в БД" - другой вариант - здесь нужно либо предварительно создавать таблу с заведомо превышающем кол-вом строк под все магазины, либо динамически в процедуре (ДМЛ в процедурах не есть хорошо) под полученное кол-во из первого запроса (а отсюда уже можно будет и в отчет сливать инфу простым селектом)

Последний раз редактировалось soleil@mmc; 19.05.2009 в 14:01.
soleil@mmc вне форума Ответить с цитированием
Старый 19.05.2009, 14:11   #9
span4
Пользователь
 
Регистрация: 04.04.2009
Сообщений: 33
По умолчанию

мне нужен второй вариант.. если есть возможность, можешь привести пример как это делать на любых таблицах.. я как раз разберусь и смогу применить это в своем случае
span4 вне форума Ответить с цитированием
Старый 19.05.2009, 14:47   #10
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а на чем ты пишешь - какой сервак БД?
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамический запрос access 2007 Тупой Microsoft Office Access 3 26.06.2009 17:52
Динамический запрос kaizer131 Microsoft Office Access 6 03.04.2009 22:23
Динамический массив Ivin Мультимедиа в Delphi 14 27.02.2009 23:22
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50
Динамический массив _ares_ Паскаль, Turbo Pascal, PascalABC.NET 3 26.12.2007 23:54