![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Всем доброго времени суток...
Подскажите алгоритм построения выборки посредством SQL из таблиц Paradox...Суть задачи... Есть 2 одинаковые по структуре таблицы...с полями Дата Номер Цена...есть таблица с полями Дата Сумма1 Сумма2... Нужно из первых 2-х таблиц выбрать суммы цен за каждую дату...Затем эти суммы по датам перекинуть во 3-ю таблицу... Напимер... ........Таблица1................................Та блица2 20.11.2009.....1.....100*******22.11.2009.....2... .125 21.11.2009.....2......20*******25.11.2009.....3... .252 22.11.2009.....3......30*******29.11.2009.....4... .20 21.11.2009.....4......25*******22.11.2009.....5... .123 23.11.2009.....5......32*******25.11.2009.....6... .100 В таблице 3 должно быть 20.11.2009.....100....0 21.11.2009.....45....0 22.11.2009.....30....248 23.11.2009.....32.....0 25.11.2009.....0....352 29.11.2009.....0....20 Я уже реализовал работу программы, но через циклы и SQl запросы и.т.п...т.е. мне моя реализация не нравится... PS код реализации можно не писать, мне бы алгоритм... |
|
#2
|
|||
|
|||
|
Код:
SELECT [Дата], SUM([Цена]) FROM Table_Name GROUP BY [Дата] А объединять и вставлять придется руками. |
|
#3
|
||||
|
||||
|
Можно и без промежуточных телодвижений:
Код:
SELECT * INTO Table3
FROM (SELECT Tmp1.DateField, Sum(Tmp1.PriceField) AS SumOfPriceField
FROM (SELECT DateField,NumberField,PriceField
FROM Table1
UNION
SELECT DateField,NumberField,PriceField
FROM Table2) AS Tmp1
GROUP BY Tmp1.DateField)Последний раз редактировалось Страдалецъ, 29.11.2009 в 19:37. |
|
#4
|
|||
|
|||
|
В Парадоксе?
Честно говоря давно с BDE не работал, так что не помню, что там поддерживается, а что - нет. Более того, у тебя там ошибка, т.к. там тогда нужен JOIN, а не UNION. |
|
#5
|
||||
|
||||
|
Почему Join? У него стоит задача собрать данные из двух таблиц в одну общую и по ней делать групировку по дате с получением суммы - что я и сделал.
|
|
#6
|
||||
|
||||
|
Ладно попробую поиграться с выборкой Страдалецъ...Если что отпишусь...
|
|
#7
|
||||
|
||||
|
2 Страдалецъ...
Использовал твой вариант выборки... Код:
SELECT * INTO Table3
FROM (SELECT Tmp1.DateField, Sum(Tmp1.PriceField) AS SumOfPriceField
FROM (SELECT DateField,NumberField,PriceField
FROM Table1
UNION
SELECT DateField,NumberField,PriceField
FROM Table2) AS Tmp1
GROUP BY Tmp1.DateField)Код:
with DataModule_.Query_Income do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * INTO Income');
SQL.Add('FROM');
SQL.Add('(SELECT Tmp1.DateDay, Sum(Tmp1.Summ) AS SumOfSumm');
SQL.Add('FROM');
SQL.Add('(SELECT DateDay, NumberBill, Summ FROM ListBillGoods.db)');
SQL.Add('UNION');
SQL.Add('(SELECT Dateday, NumberBill, Summ FROM ListBillBread.db)AS Tmp1)');
SQL.Add('GROUP BY Tmp1.DateDay)');
Open;
end;Подскажи пожалуйста, что не так...что то я не совсем понимаю принцип команды SELECT INTO...понимаю, что создает временную таблицу Income, вот вопрос только в памяти или на диске...в сети мало что нашел, но продолжу... Последний раз редактировалось NIch, 03.12.2009 в 09:16. |
|
#8
|
|||
|
|||
|
Код:
insert into <Таблица3> (<Дата>, <Сумма>)
(select <Дата>, sum(<Сумма>)
from (select <Дата>, <Сумма>
from <Таблица1>
union all
select <Дата>, <Сумма>
from <Таблица2>)
group by <Дата>)и никаких циклов и куч запросов P.S. работаю с Oracle, возможно, придется слегка адаптировать Последний раз редактировалось xanorik, 07.12.2009 в 14:49. |
|
#9
|
||||
|
||||
|
Здесь наверное правильнее использовать не Open, а ExecSql т.к. фактически вывод перенаправляется в новую таблицу.
Если ругается на INTO, то в парадоксе возможно используется несколько измененный диалект SQL, а тут уже справку в руки. |