Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.08.29;
Скачать: [xml.tar.bz2];

Вниз

Как сформировать запрос в 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;
Скачать: [xml.tar.bz2];

Наверх





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


3-95678
harismatik
2002-08-07 12:06
2002.08.29
Как и с помощью чего отобразить ?


4-96031
eruc
2002-06-26 16:23
2002.08.29
Application with taskbar interface


3-95660
Cossys
2002-08-08 10:02
2002.08.29
Нужен компонент или как это сделать?


1-95844
MARcoDEN
2002-08-17 15:36
2002.08.29
Проблема со вставкой ProgressBar в StatusBar





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский