Access. Запрос с выбором приоритетных критериев.

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Access. Запрос с выбором приоритетных критериев.

Сообщение 3ton » 24.11.2005 (Чт) 11:37

Есть тсводная таблица в базе данных следующего сдержания:

TovarID Integer
TovarPrizn1 c(20),
TovarPrizn2 c(20),
CodeBase c(2),
RateBase integer,
Prize_1 float

TovarPrizn[n] - разные признаки товара

Код: Выделить всё
1  |    2222  |  Кривой  | ST | 0 |  1.22
1  |          |  Кривой  | DT | 1 | 
1  |    2222  |            | ST | 2 |  1.23
2  |    2223  |            | ST | 1 |  1.22
2  |          |  Кривой  | DT | 0 | 
3  |    2224  |            | ST | 2 |  1.21



Вопрос:

Надо сформировать следующий запрос
Группировка по id, а остальные поля, кроме поля кода базы должны быть (по возможности) не пустыми, с приорететом из поля "Rate"

Примерно так:

Код: Выделить всё
1  |    2222  |  Кривой  | 1.22
2  |    2223  |  Кривой  | 1.22
3  |    2224  |            | 1.21


Помогите, пожалуйста с кодом.
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.11.2005 (Чт) 11:40

Т.е. если поле Rate пустое, то брать Code?
IIf(IsNull(RateBase),IIf(IsNull(CodeBase),"null",CodeBase),RateBase)
Lasciate ogni speranza, voi ch'entrate.

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 24.11.2005 (Чт) 11:51

(1) Поле Rate быть пустым не может (правило) такие поля автоматически удаляются. Это поле - приоритет базы в сводной таблице.
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 24.11.2005 (Чт) 11:52

+(2) 0 - Наивысший приоритет
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.11.2005 (Чт) 11:55

Ты хочешь сказать, "с сортировкой по полю Rate"?
Ну так сортируй, добавь в запрос ORDER BY RateCode DESC
Lasciate ogni speranza, voi ch'entrate.

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 24.11.2005 (Чт) 12:01

После того, как врубить в запрос группировку, сортировка теряет смысл, т.к. в поле надо будет указывать явно агрегатную функцию first/last, и он выбирает игнорируя сортировку (самого запроса)

В конечном запросе попадаются пустые поля, хотя заполнять их есть чем, из других аналогичных строк с таким-же ID
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 24.11.2005 (Чт) 12:05

В моем запросе мне нужно оставить только одну строку (каждого товара) с доп. информацией (не пустой) из аналогичных строк (по ID) в соответствии с приоритетом.
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.11.2005 (Чт) 12:25

SELECT *
FROM qGroupRecordset
ORDER BY Rate

где qGroupRecordset -- твой запрос с группировкой.
Lasciate ogni speranza, voi ch'entrate.

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 24.11.2005 (Чт) 17:04

Вобщем вот пример того что есть:
Изображение

А нужно получить это:
Изображение

Не пойму как сделать такой запрос :?:

http://triton-39.chat.ru/overaldbmini.mdb
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 25.11.2005 (Пт) 11:56

Всем спасибо на SQL.RU помогли :)

Если интересно код такой:

Код: Выделить всё
SELECT TT1.IDTovar, TT1.P AS Prizn1, TT2.P AS Prizn2
FROM
(SELECT DISTINCT IDTovar FROM Table1) AS TT0,
(SELECT T1.IDTovar, T1.P,T1.RateBase FROM
(SELECT IDTovar, RateBase, First(Prizn1) As P FROM Table1 WHERE Prizn1 IS NOT NULL GROUP BY IDTovar, RateBase) AS T1,
(SELECT IDTovar, Min(RateBase) As BestRate FROM Table1 WHERE Prizn1 IS NOT NULL GROUP BY IDTovar) AS R1,
T1 INNER JOIN R1 ON T1.IDTovar=R1.IDTovar AND T1.RateBase=R1.BestRate) AS TT1,
(SELECT T1.IDTovar, T1.P,T1.RateBase FROM
(SELECT IDTovar, RateBase, First(Prizn2) As P FROM Table1 WHERE Prizn2 IS NOT NULL GROUP BY IDTovar, RateBase) AS T1,
(SELECT IDTovar, Min(RateBase) As BestRate FROM Table1 WHERE Prizn2 IS NOT NULL GROUP BY IDTovar) AS R1,
T1 INNER JOIN R1 ON T1.IDTovar=R1.IDTovar AND T1.RateBase=R1.BestRate) AS TT2,
TT0 LEFT JOIN TT1 ON TT0.IDTovar=TT1.IDTovar,
TT0 LEFT JOIN TT2 ON TT0.IDTovar=TT2.IDTovar

(с) Karfaqen http://www.sql.ru/forum/memberinfo.aspx?mid=47252
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron