Re: Вопрос по построению запроса.
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.04.05 12:58
Оценка: 1 (1)
Здравствуйте, Oso6b, Вы писали:

O>В MS SQL в базе есть 3 таблицы.

O>В первой дан прайслист, с наименованиями товаров и колонками прайсов с ценами в них.
Вот здесь непонятно. Если базу проектировал вменяемый человек, то таблица устроена примерно так:
create table PriceList(
ID int identity, 
ProductID int not null foreign key references Products(ID),
ColumnID int not null foreign key references Columns(ID),
Price Decimal(11, 4) not null
)
create unique index PriceListUQ on PriceList(ProductID, ColumnID)

Тогда для данного клиента прайс построится примерно так:
select ProductName, Price from
  Product 
inner join PriceList on Prodict.ID = PriceList.ProductId
inner join Client on Client.ColumnID = PriceList.ColumnID
where Client.ID = @ClientID


Ну, а если проектировал халтурщик, то таблица PriceList может выглядеть и так:
create table PriceList(
ID int identity, 
ProductID int not null foreign key references Products(ID),
Price1 Decimal(11, 4) not null,
Price2 Decimal(11, 4) not null,
Price3 Decimal(11, 4) not null,
Price4 Decimal(11, 4) not null,
Price5 Decimal(11, 4) not null,
Price6 Decimal(11, 4) not null,
)


Тогда все будет несколько сложнее.

O>Во второй перечислены все клиенты с указанием колонки прайса.

O>В третьей (формируемой для каждого клиента) необходимо перечислить все позиции товаров с указанием в одной колонке цены, соответсвующей колонке прайса из первой таблицы.
O>Как необходимо построить запрос на эту выборку и каким образом вставить цену в третью таблицу?

O>Необходимо также сделать так, чтобы получая на выходе прайс со своими ценами, клиент мог проставить количество по позициям, получить сумму и отправить эту заявку.

Это уже выходит за рамки базы данных. Клиентское приложение должно дать такую возможность. Способов — масса.
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Вопрос по построению запроса.
От: Oso6b  
Дата: 14.04.05 11:23
Оценка:
В MS SQL в базе есть 3 таблицы.
В первой дан прайслист, с наименованиями товаров и колонками прайсов с ценами в них.
Во второй перечислены все клиенты с указанием колонки прайса.
В третьей (формируемой для каждого клиента) необходимо перечислить все позиции товаров с указанием в одной колонке цены, соответсвующей колонке прайса из первой таблицы.
Как необходимо построить запрос на эту выборку и каким образом вставить цену в третью таблицу?
Необходимо также сделать так, чтобы получая на выходе прайс со своими ценами, клиент мог проставить количество по позициям, получить сумму и отправить эту заявку.
Re: Вопрос по построению запроса.
От: _Senya  
Дата: 14.04.05 11:29
Оценка:
Здравствуйте, Oso6b, Вы писали:

O>В MS SQL в базе есть 3 таблицы.

O>В первой дан прайслист, с наименованиями товаров и колонками прайсов с ценами в них.
O>Во второй перечислены все клиенты с указанием колонки прайса.
O>В третьей (формируемой для каждого клиента) необходимо перечислить все позиции товаров с указанием в одной колонке цены, соответсвующей колонке прайса из первой таблицы.
O>Как необходимо построить запрос на эту выборку и каким образом вставить цену в третью таблицу?
O>Необходимо также сделать так, чтобы получая на выходе прайс со своими ценами, клиент мог проставить количество по позициям, получить сумму и отправить эту заявку.

А что если первую таблицу разбить на 2: товар и цены (товар_ид, колонкаПрайса_ид, цена)? Выйдет простой INNER JOIN
Дураки — не мамонты, они не вымрут...
Re[2]: Вопрос по построению запроса.
От: Oso6b  
Дата: 14.04.05 11:35
Оценка:
Здравствуйте, _Senya, Вы писали:

_S>Здравствуйте, Oso6b, Вы писали:


O>>В MS SQL в базе есть 3 таблицы.

O>>В первой дан прайслист, с наименованиями товаров и колонками прайсов с ценами в них.
O>>Во второй перечислены все клиенты с указанием колонки прайса.
O>>В третьей (формируемой для каждого клиента) необходимо перечислить все позиции товаров с указанием в одной колонке цены, соответсвующей колонке прайса из первой таблицы.
O>>Как необходимо построить запрос на эту выборку и каким образом вставить цену в третью таблицу?
O>>Необходимо также сделать так, чтобы получая на выходе прайс со своими ценами, клиент мог проставить количество по позициям, получить сумму и отправить эту заявку.

_S>А что если первую таблицу разбить на 2: товар и цены (товар_ид, колонкаПрайса_ид, цена)? Выйдет простой INNER JOIN


А где задавать сравнение? Нужно проверить какая колонка прайса присвоена конкретному клиенту. Где сравнивать и как?
Re: Вопрос по построению запроса.
От: wildwind Россия  
Дата: 14.04.05 11:55
Оценка:
Здравствуйте, Oso6b, Вы писали:

O>Как необходимо построить запрос на эту выборку и каким образом вставить цену в третью таблицу?


Я так понял, прайс надо сформировать свой для каждого клиента?

Соединяешь клиентов и товары без условий, это будет декатрово произведение; нужную цену выбираешь с помощью case. Результат вставляешь в третью таблицу. Итого один insert.

Только неясно, зачем нужна третья таблица, если ее данные можно получить из первых двух в любой момент.
Re[2]: Вопрос по построению запроса.
От: Oso6b  
Дата: 14.04.05 12:41
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, Oso6b, Вы писали:


O>>Как необходимо построить запрос на эту выборку и каким образом вставить цену в третью таблицу?


W>Я так понял, прайс надо сформировать свой для каждого клиента?


W>Соединяешь клиентов и товары без условий, это будет декатрово произведение; нужную цену выбираешь с помощью case. Результат вставляешь в третью таблицу. Итого один insert.


W>Только неясно, зачем нужна третья таблица, если ее данные можно получить из первых двух в любой момент.


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

Кстати, можно ли ограничить разрешения при вводе таблиц, т.е. чтобы клиент не мог писать в некоторых колонках?
Re[3]: Вопрос по построению запроса.
От: _Senya  
Дата: 14.04.05 13:24
Оценка:
Здравствуйте, Oso6b, Вы писали:

O>А где задавать сравнение? Нужно проверить какая колонка прайса присвоена конкретному клиенту. Где сравнивать и как?


Sinclair дальше ответил более детально
Дураки — не мамонты, они не вымрут...
от модератора
От: Merle Австрия http://rsdn.ru
Дата: 14.04.05 13:31
Оценка:
Здравствуйте, _Senya, Вы писали, писали, но слишком много цитировали:
Напоминаю всем участникам дискуссии, что избыточное цитирование запрещено правилами форума
... [ RSDN@Home 1.1.4 rev 395 ]
Мы уже победили, просто это еще не так заметно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.