Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.53 MB
Время: 0.01 c
1-95859
Cr@sh
2002-08-17 15:50
2002.08.29
Построение линий.


1-95907
Александр
2002-08-18 17:35
2002.08.29
Как разбить строку на части


1-95905
staratel
2002-08-16 13:30
2002.08.29
Работа с формами


8-95915
MK
2002-01-06 16:26
2002.08.29
Мерцание TImage при перемещении


1-95904
stany
2002-08-18 21:55
2002.08.29
Как изменять только Width компонента Panel мышью в Runtime?