![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с запросом к Paradox [D5, Paradox]
Новичек © (2008-04-14 14:24:00)Есть запрос такого вида:
SELECT r.Number as rNumber, r.Name as rName,
SUM(rb.Summa)*28 as sumRB
FROM RBudget rb, Reklama r
WHERE
rb.Reklama = r.Number And
rb.RBdate Between '01.01.2008' And '01.03.2008'
GROUP BY r.Number, r.Name
И вот надо его периписать так чтобы если дата rb.RBdate больше например '01.02.2008' то в строке SUM(rb.Summa)*28 as sumRB не было домножения на 28, если меньше то домножалось. Чтото типа оператора Case When .. из MSSQL. Как такое реализовать на Paradox?
korneley (2008-04-14 16:46:00) [1]2 раза "гы" вообще второй подзапрос как-то кривой :) От спешки все... Да и еще глюк есть: если селекты нил вовзвратят (хотябы один). Да и с Парадоксом нехорошо получилось... (с)
korneley (2008-04-14 16:41:00) [2]Гы... Я еще скопипастил криво:
AND DATE >= "02.03.2008"во втором подселекте не на том месте :)))
Anatoly Podgoretsky (2008-04-14 16:36:00) [3]> korneley (14.04.2008 16:21:18) [18]
Вложенные запросы не потянет, а вот рыба от Savek очень даже свежая.
Anatoly Podgoretsky (2008-04-14 16:35:00) [4]> Новичек (14.04.2008 16:05:16) [16]
Запрос с UNION по границе раздела, в соответствии с логикой, результат ничем не отличается от IIF
Savek (2008-04-14 16:33:00) [5]Тяжелый случай...
Тогда видится такой вариант:
два раза инсерт во временную таблицу, а потом уже оттуда селект
либо завести дополнительное поле в этой же таблице, тогда сначала два раза апдейт...
Новичек (2008-04-14 16:27:00) [6]
> селект из (
> селект с умножением на 28
> union
> селект без умножения)
> груп бай имя поля
Тоже так хотел сделать, но конструкция Select * From (Select ..) не работает.
korneley (2008-04-14 16:21:00) [7]Интересно, а такое проканает?
SELECT DISTINCT T1.NAME,
(SELECT SUM(SUMMA) * 28
FROM TABLE T2
WHERE T1.NAME = T2.NAME
AND DATE < "02.03.2008"
) +
(SELECT SUM(SUMMA)
WHERE T1.NAME = T2.NAME
AND DATE >= "02.03.2008"
FROM TABLE T3
WHERE T1.NAME = T3.NAME)
FROM TABLE T1
Savek (2008-04-14 16:19:00) [8]который [2], просто для группировки добавляем
селект из (
селект с умножением на 28
union
селект без умножения)
груп бай имя поля
ЗЫ Только незнаю потянет ли это парадокс
Новичек (2008-04-14 16:05:00) [9]
> IIF в парадоксе не канает?
Помоему нет.
>так это нужен другой запрос
Не подскажете хоть примерно какой?
Savek (2008-04-14 16:01:00) [10]IIF в парадоксе не канает?
Anatoly Podgoretsky (2008-04-14 15:56:00) [11]Аааааааааа, так у тебя дата в середине интервала, так это нужен другой запрос и например UNION
Anatoly Podgoretsky (2008-04-14 15:54:00) [12]
> Не суть. Больше либо равна то не домножать. Если меньше
> то домножать.
Просто убери *28 и твое желание исполнено.
Johnmen (2008-04-14 15:49:00) [13]А-а-а... Понятно.
Парадокс фтопку. Ещё раз... :)))
Новичек (2008-04-14 15:37:00) [14]
> Что мешает указать данное условие DT < '02.03.2008' в [2]?
Это в юнион чтоли? Тогда по рекламному источнику будет 2 записи с суммами. До даты и после. В общем наверное никак не получится. Вот засада..
Johnmen (2008-04-14 15:31:00) [15]Что мешает указать данное условие DT < '02.03.2008' в [2]?
Новичек (2008-04-14 15:22:00) [16]
> Как же ты тогда отделишь те, что "больше например '01.02.
> 2008'", и те, что меньше???
Не совсем понял. Нужно чтото типа такого:
Declare @T Table (F1 int, DT datetime)
Insert @T Values(1, '01.01.2008')
Insert @T Values(1, '01.02.2008')
Insert @T Values(1, '02.03.2008')
Insert @T Values(1, '02.03.2008')
Select Sum(Case When DT < '02.03.2008' Then F1*28 Else F1 End), DT
From @T
Group By DT
Johnmen (2008-04-14 15:13:00) [17]Как же ты тогда отделишь те, что "больше например '01.02.2008'", и те, что меньше???
Новичек (2008-04-14 15:03:00) [18]
> У одних и тех же r.Number, r.Name может быть одновременно
> разная rb.RBdate?
Ну да. Название рекламного источника а суммируется платежи по ним
Новичек (2008-04-14 15:01:00) [19]
> Кроме того остался неясным момент, а если равна, то что
> делить?
Не суть. Больше либо равна то не домножать. Если меньше то домножать.
>Но "если меньше то домножалось" это не возможно в принципе.
Т. е. выхода нет?
Johnmen (2008-04-14 14:58:00) [20]
> Тогда получится разделение по одним и темже r.Number, r.
> Name
У одних и тех же r.Number, r.Name может быть одновременно разная rb.RBdate?