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

Откуда:
Сообщений: 13
есть таблица скажем:
create table main
(
Id int primary key identity(1,1),
manufacture varchar (50),
serie varchar (50),
model varchar (50),
body varchar (50),
price money,
KLB float,
system_frequency float
)

нужно написать хранимку которая сможет выбирать из таблицы две позиции по введенным пользователем полям (пользователь вводит поля: manufacture, serie, model, body - у двух разных позиций таблицы) и выводит только те поля которые у этих двух позиций отличаются. если не очень понятно объяснил, то можно пример из жизни. необходимо с помощью ХП реализовать что-то похожее на сравнение двух товаров в интернет-магазине, только как правило в интернет магазине выводятся все параметры, а я хочу чтобы выводилось только то чем два товара друг от друга отличаются.
При этом как говорилось выше, чтобы точно идентифицировать конкретный товар пользователю необходимо указать обязательно значения полей manufacture, serie, model, body - у обоих "сравниваемых" товаров.
заранее спасибо!
14 окт 09, 00:55    [7781948]     Ответить | Цитировать Сообщить модератору
 Re: Помогите со сравнением  [new]
iljy
Member

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

не понял, но здорово... Выберите нужные два товара, а потом выводите их на клиенте как хотите!

SELECT * from main
where manufacture = @manufacture1 and serie = @serie1 and model = @model1 and body = @body1
  union all
SELECT * from main
where manufacture = @manufacture2 and serie = @serie2 and model = @model2 and body = @body2

или в одну строку:
SELECT * FROM
(SELECT * from main
where manufacture = @manufacture1 and serie = @serie1 and model = @model1 and body = @body1) t1
  cross join
(SELECT * from main
where manufacture = @manufacture2 and serie = @serie2 and model = @model2 and body = @body2)t2
я исхожу из того, что комбинация manufacture, serie, model, body является уникальным ключом
14 окт 09, 01:18    [7782007]     Ответить | Цитировать Сообщить модератору
 Re: Помогите со сравнением  [new]
NasonovYA
Member

Откуда:
Сообщений: 13
iljy,
это все ясно. дело в том что я потом к базе буду обращаться из оболочки написанной на С#. поэтому хотел чтобы как можно больше всего обрабатывалось на сервере, а оболочка была лишь "оболочкой". а так получается, я делаю в базе простую выборку по двум товарам, а уже в оболочке должен писать разные условия как эту информацию выводить. а если бы ХП в базе могла сама отбрасывать лишние поля, я бы из оболочки просто вызвал эту ХП и вывел все что она выдает.
14 окт 09, 08:08    [7782243]     Ответить | Цитировать Сообщить модератору
 Re: Помогите со сравнением  [new]
iljy
Member

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

вы хотите получать из ХП выборку с различным набором полей?? Поверьте, оно того не стоит. Гораздо проще сравнить на С# значения полей чем разбираться с динамической выборкой. ХП может устанавливать равные поля в значение NULL если очень уж хотите, но принципиального выигрыша оно вам не даст.
14 окт 09, 12:31    [7783882]     Ответить | Цитировать Сообщить модератору
 Re: Помогите со сравнением  [new]
NasonovYA
Member

Откуда:
Сообщений: 13
iljy
NasonovYA,

вы хотите получать из ХП выборку с различным набором полей?? Поверьте, оно того не стоит. Гораздо проще сравнить на С# значения полей чем разбираться с динамической выборкой. ХП может устанавливать равные поля в значение NULL если очень уж хотите, но принципиального выигрыша оно вам не даст.


ну если вы подскажите хотя бы такой вариант как сделать чтобы ХП устанавливала равные поля в NULL, то буду очень благодарен. дело в том что мне это нужно не для работы, а для написания диплома, и преподавателем было поставлено условие обработка всех операций с данными в базе, а из оболочки лишь ради красивого интерфейса. вот и стараюсь все "расчеты" засунуть в базу.
15 окт 09, 00:28    [7788103]     Ответить | Цитировать Сообщить модератору
 Re: Помогите со сравнением  [new]
iljy
Member

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

SELECT
  nullif(t1.price, t2.price) price1,  nullif(t2.price, t1.price) price2,
  nullif(t1.KLB, t2.KLB) KLB1,  nullif(t2.KLB, t1.KLB) KLB2,
  nullif(t1.system_frequency, t2.system_frequency) system_frequency1,
  nullif(t2.system_frequency, t1.system_frequency) system_frequency2
FROM
(SELECT * from main
where manufacture = @manufacture1 and serie = @serie1 and model = @model1 and body = @body1) t1
  cross join
(SELECT * from main
where manufacture = @manufacture2 and serie = @serie2 and model = @model2 and body = @body2)t2
15 окт 09, 00:41    [7788120]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить