Форум: "Начинающим";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
ВнизСложно разобраться. прошу помощи!!! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c