Текущий архив: 2002.08.29;
Скачать: CL | DM;
ВнизКак сформировать запрос в TQuery Найти похожие ветки
← →
SZap (2002-08-08 13:34) [0]у меня 3 таблицы: накладные, товары, изменения цен...
- в каждой накладной несколько товаров (обязательно)
- в таблице "изменения цен" может быть от 0 (т.е. небыть) до 3 записей (с разными ценами)
необходимо сформировать список состоящий из всех товаров с последней ценой из таблицы "изменения цен" (главное, чтобы товары неповторялись)
← →
SaS13 (2002-08-08 13:38) [1]сделай
group by товары
в запросе, а вообще связь не ясна.
← →
SZap (2002-08-08 13:52) [2]не совсем понятно, что значит сделай "group by товары"
Таблицы
Т1 (П1,П2,П3,...)
Т2 (П1,П2,П3,...)
Т3 (П1,П2,П3,...)
Связи
T1.П1=T2.П1=T3.П1
T2.П2=T3.П2
← →
Johnmen (2002-08-08 14:26) [3]>SZap
>...с последней ценой из таблицы ...
Если определишь понятие "последняя", то дальше все элементарно...
← →
elv (2002-08-08 15:32) [4]"необходимо сформировать список состоящий из всех товаров с последней ценой из таблицы "изменения цен" (главное, чтобы товары неповторялись)"
Например так.
select
t2.p1, t3.p3
from
t2, t3
where
t2.p1 = t3.p1
and
t3.p2=(Select Max(t3.p2) from t3 where t3.p1=t2.p1)
← →
SZap (2002-08-08 15:35) [5]короче, есть Т2.П5 (цена предварительная)
в Т3.П3 указан признак изменения
1 - цена на день заказа
2 - цена на день загрузки
3 - цена на день вывоза
в T3.П4 - новая цена
записи в Т3 добавляются только в случае если они отличаются от цены в Т2.П5, т.ч. на каждый товар может быть, как я уже говорил, от 0 (т.е. небыть) до 3 записей.
интересует запись с наибольшим значением в Т3.П3, в случае отсутствия информации о товаре в Т3 поле в моем запросе должно оставаться пустым
← →
SZap (2002-08-08 15:38) [6]elv: а они повторяются, какже без этого...
← →
SaS13 (2002-08-08 15:45) [7]на вскидку, могут быть ошибки:
select t2.p2, t3.p5
from t2 join t3 on t3.p1 = t2.p1 and t3.p2 = t2.p2 and t3.p3 in (select max(tbl3.p3) from t3 as tbl3 where tbl3.p1 = t2.p1 and tbl.p2 = t2.p2)
group by t2.tovar
← →
Johnmen (2002-08-08 15:58) [8]Допавлю к вскидке SaS13 © (08.08.02 15:45) :
1. не JOIN, а RIGHT JOIN в данном контексте
2. группировка по тем полям, кот. в select, значит извратимся
select t2.p2, sum(t2.p5)
← →
elv (2002-08-08 16:08) [9]SZap (08.08.02 15:38)
elv: а они повторяются, какже без этого...
Select Distinct ...
P.S. Мне кажется проект недоработан.
← →
SaS13 (2002-08-08 16:10) [10]
> elv © (08.08.02 16:08)
distinct не катит, записи то разные
← →
elv (2002-08-08 16:22) [11]distinct не катит, записи то разные
Если они разные, тогда не будет разницы использовать distinct или нет.
← →
SaS13 (2002-08-08 16:28) [12]To: elv
Нет ты не понял: записи берутся из двух (минимум) таблиц, и там и там есть товар, поэтому если писать:
select distinct t1.p1, t2.p2
то будут выбираться все записи, даже если t1.p1 одинаково, но t2.p2 - разные
а если написать:
select t1.p1, t2.p2
...
order by t1.p1
то записи сгруппируются по t1.p1 и не будет двух записей с одинаковыми t1.p1
← →
Johnmen (2002-08-08 16:38) [13]>SaS13 © (08.08.02 16:28)
>select t1.p1, t2.p2
>...
>order by t1.p1
Повторяюсь, но это неверный вид запроса по сути...
← →
SaS13 (2002-08-08 16:41) [14]
> Johnmen © (08.08.02 16:38)
Сорри, поправочка:
select t1.p1, Sum(t2.p2)
...
group by t1.p1
← →
elv (2002-08-08 16:43) [15]Нет ты не понял: записи берутся из двух (минимум) таблиц, и там и там есть товар
А разве в таблице товаров есть _одинаковые_ товары?
Я думал,что есть таблица товаров t2, есть таблица цен t3. Т.е. связь один ко многим.
← →
SaS13 (2002-08-08 16:50) [16]А разве в таблице товаров есть _одинаковые_ товары?
Я думал,что есть таблица товаров t2, есть таблица цен t3. Т.е. связь один ко многим.
даже если нет, то distinct"ом в данном случае будет выбираться объединение множеств t2 и t3, за исключением разве что если встретятся одинаковые товар и цена, т.е. для каждого товара из t2 будет браться цена из t3, с фильтрацией связок Товар-Цена
← →
SZap (2002-08-08 17:22) [17]elv, SaS13: в таблице товаров - товары повторяются
все класно, спасибо, много сказано, но я почти ничего НЕПОНЯЛ :(
может чтото уточнить?
← →
elv (2002-08-08 20:12) [18]SaS13
даже если нет, то distinct"ом в данном случае будет выбираться объединение множеств t2 и t3, за исключением разве что если встретятся одинаковые товар и цена, т.е. для каждого товара из t2 будет браться цена из t3, с фильтрацией связок Товар-Цена
Человеку надо отобрать список товаров без повторений с последней ценой. В t2 список товаров дублируется. Так? Каждый товар имеет цену. Если товар одинаковый, он имеет одинаковую цену. Почему distinct не поможет? Наверное я не правильно понял структуру/задачу.
Конечно запрос можно оптимизировать и выиграть несколько милсек.
← →
elv (2002-08-08 20:13) [19]SZap
elv, SaS13: в таблице товаров - товары повторяются
все класно, спасибо, много сказано, но я почти ничего НЕПОНЯЛ :(
может чтото уточнить?
Ты нам мешаешь :)
А если серьезно, ты попробовал применить советы на практике?
← →
ЮЮ (2002-08-09 03:06) [20]Предлагаю часть вычислений перенести на клиента, т.к. Local SQL - это Local SQL. Т.е. запрос возвращает записи:
[поля из таблицы Товары (t2)] [Цена1] [Цена2] [Цена3],
где поля запроса [Цена1] [Цена2] [Цена3] могут быть и Null, а на клиенте - в вычислимом поле - уже определиться, какая цена нас интересует
← →
SZap (2002-08-09 13:39) [21]с двумя таблицами все получается класно, но когда подсоединяю третью какаято фигня: когда в Т3 нет записи то эти товары неотображает :(. Также непонятно как сделать, чтоб если в Т3 на товар более одной записи выбиралась только одна, Т3.П3 которой имеет большее значение.
Пока сделал все перебором через TTable но это так долго...
И еще, очень буду благодарен за ссылку на описание синтаксиса SQL (именно для TQuery)...
← →
SaS13 (2002-08-09 13:46) [22]И еще, очень буду благодарен за ссылку на описание синтаксиса SQL (именно для TQuery)...
Какой стандарт поддерживает твоя СУБД, такой и TQuery.SQL
← →
SZap (2002-08-09 13:51) [23]SaS13:
я использую TQuery с локальными .dbf
← →
SaS13 (2002-08-09 13:58) [24]SZap (09.08.02 13:51)
Стандарт SQL-92 синтаксис читай в MSDN.
← →
elv (2002-08-09 14:03) [25]МАРТИН ГРУБЕР "Понимание SQL"
Страницы: 1 вся ветка
Текущий архив: 2002.08.29;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.007 c