Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.03;
Скачать: CL | DM;

Вниз

Сложно разобраться. прошу помощи!!!   Найти похожие ветки 

 
ViktorZ ©   (2006-08-10 20:57) [0]

Уважаемые форумяне. У меня громоздкая задача. Попытаюсь изложить ее понятно.
Цель всей задачи: выбрать нужные данные и передать их в EXCEL
СУБД: PARADOX
SQL::LocalSQL
BDE
DELPHI7
Есть файл .sql  в нем Запрос:

SELECT  d3.Name NAME,SUM(D2.Qnt*D2.RealPrice) AS SUMMA,
d3.CARD CARD,
D.LogicDate LogicDate,
D1.Sifr Sifr,
D4.Categ CAteg
FROM ":T4:ACheck" D, ":T4:ADCheck" D1, ":T4:ARcheck" D2, ":T4:CARDS" d3, ":T4:Menu" D4,":T4:Apcheck" V
WHERE
(D1.Sys_Num = D.Sys_Num) AND (V.Sys_Num=D1.Sys_Num)  AND (V.Curency=4)  AND (D2.Sys_Num = D1.Sys_Num)  AND (D1.CardCod=d3.CARD )  AND (D4.Sifr = D2.Sifr)
Group by CARD,NAme,LogicDATe,Sifr,CAteg,Curency

Так где то на 4 алиасов до Т9.

Далее идут два запроса (у меня на форме два разлиных Квери)
1)INSERT INTO ":SEN:Total"(Card,OST) SELECT F.CArd,F.SUMMA
FROM ":T4:fgh.sql" F
WHERE F.CAteg<>:P1 AND F.Sifr=:P2 AND F.LogicDate between :P3 AND :P4
2) INSERT INTO ":SEN:Total"(CArd,SUMMA) SELECT F.CArd,F.SUMMA FROM ":T4:fgh.sql" F
WHERE F.CAteg=:P1 AND F.Sifr=:P2 AND F.LogicDate between :P3 AND :P4

далее делаю следующее
***********************************
INSERT INTO ":SEN:Final"(Name,CArdCode,OST,SUMMA,Itogo,SkidkaSumma,SkidkaOst,SkidkaItogo)
SELECT C.NAME,T.CARD,SUM(T.OST),SUM(T.SUMMA) ," SUM(T.OST)+ SUM(T.SUMMA) AS ITOGO , (SUM(T.SUMMA)*(:skidka20))/100 AS SKIDKA20, (SUM(T.OST)*(:skidka10)/100) AS SKIDKA10," +
" (SUM(T.OST)*(:skidka10)/100) + (SUM(T.SUMMA)*(:skidka20))/100  AS ITOGOSKIDKA
FROM  ":SEN:CArds" C, ":SEN:Total" T
WHERE C.Card=T.CARD Group By C.Name , T.CARD
HAVING  SUM(T.OST) BETWEEN :sumsk1 AND :sumsk2 AND SUM (T.SUMMA) BETWEEN :sumost1 AND  :sumost2
*******************************************
Далее
UPDATE ":SEN:Final" SET SUMMA=0,SkidkaSumma=0 WHERE SUMMA IS NULL OR SkidkaSUMMA IS NULL - это для того чтобы убрать пустые ячейки в таблице

Ну и наконец
SELECT C.Name, P.CArdCode, P.OST , P.SUMMA  ," SUM( P.OST + P.SUMMA) ,P.SkidkaSumma , P.SkidkaOST," SUM(P.SkidkaSumma + P.skidkaOST)  FROm ":SEN:Final" P,":SEN:Cards" C
WHERE " C.Card=P.cardCode  Group By c.Name,P.cardCode,P.OST , P.SUMMA  ,P.SkidkaOST ," P.SkidkaSumma ORDER By CArdCode

ТЕПЕРЬ вопросы:
1) Возможно это как то оптимизировать
2) Там где обведено звездочками как сделать так чтобы в таблицу записались только те данные которые находятся между Between включая крайние пределы. То есть берем во внимание общий расход.
Пример:
SUM(T.OST) = 0, SUM(T.SUMMA)=1500 =OK
SUM(T.OST) = 1500, SUM(T.SUMMA)=1500 OK
SUM(T.OST) = 2000, SUM(T.SUMMA)=1500 FALSE
В общем суммы должны быть обе до 1999.
ЗАРАНЕЕ СПАСИБО.


 
Mike Kouzmine ©   (2006-08-10 21:52) [1]

Суть вопроса в чем? Если как передать данные в Ексел, то есть статьи на этом сайте. А если нет, то еще раз, помедленнее, я записываю...


 
Furyz ©   (2006-08-10 22:17) [2]

Задача грандиозная особенно для ветки начинающих ,
Это даже для среднего программиста сложновато.
Возможно это как то оптимизировать?
врятли , а что оно глючит?


 
Mike Kouzmine ©   (2006-08-11 00:24) [3]

Furyz ©   (10.08.06 22:17) [2] Точно. Это обязательно надо мастерам почитать.


 
ViktorZ ©   (2006-08-11 09:01) [4]

INSERT INTO ":SEN:Final"(Name,CArdCode,OST,SUMMA,Itogo,SkidkaSumma,SkidkaOst,SkidkaItogo)
SELECT C.NAME,T.CARD,SUM(T.OST),SUM(T.SUMMA) ," SUM(T.OST)+ SUM(T.SUMMA) AS ITOGO , (SUM(T.SUMMA)*(:skidka20))/100 AS SKIDKA20, (SUM(T.OST)*(:skidka10)/100) AS SKIDKA10," +
" (SUM(T.OST)*(:skidka10)/100) + (SUM(T.SUMMA)*(:skidka20))/100  AS ITOGOSKIDKA
FROM  ":SEN:CArds" C, ":SEN:Total" T
WHERE C.Card=T.CARD Group By C.Name , T.CARD
HAVING  SUM(T.OST) BETWEEN :sumsk1 AND :sumsk2 OR SUM (T.SUMMA) BETWEEN :sumost1 AND  :sumost2
Выдает не то, то есть если хотя бы одна подходит то пишет.

Пишу AND, не дает те, которые нулевые.А нужен общий вывод всех до 1999.

>Суть вопроса в чем?
Для особо ВНИМАТЕЛЬНЫХ, там Русским по серому написано: ТЕПЕРЬ вопросы.


 
Mike Kouzmine ©   (2006-08-11 12:54) [5]

ViktorZ ©   (11.08.06 09:01) [4] То, что ты написал - филькина грамота.
Начать надо не так.
1. Тип базы (есть)
2. Структура (нет)
3. Задача (нет)
4. Как делаешь (вроде есть)
5. Какие ошибки (нет)

А сейчас твой опус выглядит аналогично:
У меня есть машина.
А теперь вопрос - как сделать чтобы она ездила?


 
stone ©   (2006-08-11 13:01) [6]


> UPDATE ":SEN:Final" SET SUMMA=0,SkidkaSumma=0 WHERE SUMMA
> IS NULL OR SkidkaSUMMA IS NULL - это для того чтобы убрать
> пустые ячейки в таблице

А тепеперь внимательно посмотри на свой запрос и подумай, что будет если SUMMA > 0,а SkidkaSUMMA IS NULL или наоборот


 
Mike Kouzmine ©   (2006-08-11 13:05) [7]

stone ©   (11.08.06 13:01) [6] Достаточно по умолчанию нуль - и не нужно будет огород городить.


 
ViktorZ ©   (2006-08-11 14:13) [8]


> 2. Структура (нет)

Я не знаю конечно, но вроде из навзвания таблиц все понятно, их очень много и я если честно сам не знаю что некоторые значат мне написали что надо с ними сделать я и пытаюсь.

> 3. Задача (нет)

как сделать так чтобы в таблицу записались только те данные которые находятся между Between включая крайние пределы. То есть берем во внимание общий расход.
Пример:
SUM(T.OST) = 0, SUM(T.SUMMA)=1500 =OK
SUM(T.OST) = 1500, SUM(T.SUMMA)=1500 OK
SUM(T.OST) = 2000, SUM(T.SUMMA)=1500 FALSE
В общем суммы должны быть обе до 1999.
ЭТО ЧТО, пишу уже второй раз, разве это не задача?


> Какие ошибки (нет)-

Читай пост номер 4.

> Достаточно по умолчанию нуль - и не нужно будет огород городить.

Кажется недостаточно, я не помню но вроде из-за того что потом сложить нельзя будет.

> А тепеперь внимательно посмотри на свой запрос и подумай,
>  что будет если SUMMA > 0,а SkidkaSUMMA IS NULL или наоборот

ДА уж, затупил, занулит значит. ВОт это уже реально спасибо, начну отсюда копать.


 
MsGuns ©   (2006-08-11 15:57) [9]

>stone ©   (11.08.06 13:01) [6]
>А тепеперь внимательно посмотри на свой запрос и подумай, что будет если SUMMA > 0,а SkidkaSUMMA IS NULL или наоборот

Ну ты монстер ;)

ЗЫ: Пост [0] рекомендуется к прочтению на ночь


 
ViktorZ ©   (2006-08-11 16:08) [10]


> Ну ты монстер ;)
>
> ЗЫ: Пост [0] рекомендуется к прочтению на ночь

если честно не понял, даже хорошо это относительно меня или совсем плохо...


 
MsGuns ©   (2006-08-11 16:16) [11]

>ViktorZ ©   (11.08.06 16:08) [10]
>если честно не понял, даже хорошо это относительно меня или совсем плохо...

Упрощаю:
Для того, чтобы сфотографироваться на паспорт, не нужно чистить ботинки, гладить носки и садиться на коня


 
ViktorZ ©   (2006-08-11 19:23) [12]

>Для того, чтобы сфотографироваться на паспорт, не нужно чистить ботинки, гладить носки и садиться на коня
Причем здесь это, те надо в форексе работать, там тоже гвоорят много и долго и такими же словами, но дела ноль. Если ты так крут в программировании, то я думаю ты настолько же ничтожен например в игре в баскетбол. Нафига так закручивать? Я задал вопрос не для того чтобы мне на него ответили, для этого я прочитал статью как правильно их задавать и попытлся сделать как там, но похоже статья была написана давно, интерент сообщество изменилось;)


 
ViktorZ ©   (2006-08-12 08:00) [13]

разобрался, нужно было UPDATE ":SEN:Final" SET SUMMA=0,SkidkaSumma=0 WHERE SUMMA IS NULL OR SkidkaSUMMA IS NULL Правильно применнить для Таблицы Тотал.



Страницы: 1 вся ветка

Текущий архив: 2006.09.03;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.051 c
2-1155712068
gdaujk
2006-08-16 11:07
2006.09.03
Нужен компонент


3-1151441197
Vosik
2006-06-28 00:46
2006.09.03
Триггеры на системных таблицах в InterBase


15-1155250350
Германн
2006-08-11 02:52
2006.09.03
Ну вот. И у нас тут появился спам. :-(


2-1155203930
evgenij_
2006-08-10 13:58
2006.09.03
Потоки


3-1151191604
antoxa2005
2006-06-25 03:26
2006.09.03
Подскажите, а как указывать путь с клиента к MySQL?