Форум: "Начинающим";
Текущий архив: 2008.05.11;
Скачать: [xml.tar.bz2];
ВнизПомогите с запросом к Paradox Найти похожие ветки
← →
Новичек (2008-04-14 14:24) [0]Есть запрос такого вида:
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?
← →
Виталий Панасенко(дом) (2008-04-14 14:27) [1]никак... LocalSQL так не умеет.. создай вычисляемое поле и в нем реализуй
← →
Savek (2008-04-14 14:30) [2]селект с умножением на 28
union
селект без умножения
← →
Новичек (2008-04-14 14:35) [3]
> селект с умножением на 28
> union
> селект без умножения
Тогда получится разделение по одним и темже r.Number, r.Name
← →
Anatoly Podgoretsky © (2008-04-14 14:56) [4]> Новичек (14.04.2008 14:24:00) [0]
Вообще то конференция по Дельфи, а не по SQL
Но "если меньше то домножалось" это не возможно в принципе.
Кроме того остался неясным момент, а если равна, то что делить?
← →
Johnmen © (2008-04-14 14:58) [5]
> Тогда получится разделение по одним и темже r.Number, r.
> Name
У одних и тех же r.Number, r.Name может быть одновременно разная rb.RBdate?
← →
Новичек (2008-04-14 15:01) [6]
> Кроме того остался неясным момент, а если равна, то что
> делить?
Не суть. Больше либо равна то не домножать. Если меньше то домножать.
>Но "если меньше то домножалось" это не возможно в принципе.
Т. е. выхода нет?
← →
Новичек (2008-04-14 15:03) [7]
> У одних и тех же r.Number, r.Name может быть одновременно
> разная rb.RBdate?
Ну да. Название рекламного источника а суммируется платежи по ним
← →
Johnmen © (2008-04-14 15:13) [8]Как же ты тогда отделишь те, что "больше например "01.02.2008"", и те, что меньше???
← →
Новичек (2008-04-14 15:22) [9]
> Как же ты тогда отделишь те, что "больше например "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:31) [10]Что мешает указать данное условие DT < "02.03.2008" в [2]?
← →
Новичек (2008-04-14 15:37) [11]
> Что мешает указать данное условие DT < "02.03.2008" в [2]?
Это в юнион чтоли? Тогда по рекламному источнику будет 2 записи с суммами. До даты и после. В общем наверное никак не получится. Вот засада..
← →
Johnmen © (2008-04-14 15:49) [12]А-а-а... Понятно.
Парадокс фтопку. Ещё раз... :)))
← →
Anatoly Podgoretsky © (2008-04-14 15:54) [13]
> Не суть. Больше либо равна то не домножать. Если меньше
> то домножать.
Просто убери *28 и твое желание исполнено.
← →
Anatoly Podgoretsky © (2008-04-14 15:56) [14]Аааааааааа, так у тебя дата в середине интервала, так это нужен другой запрос и например UNION
← →
Savek (2008-04-14 16:01) [15]IIF в парадоксе не канает?
← →
Новичек (2008-04-14 16:05) [16]
> IIF в парадоксе не канает?
Помоему нет.
>так это нужен другой запрос
Не подскажете хоть примерно какой?
← →
Savek (2008-04-14 16:19) [17]который [2], просто для группировки добавляем
селект из (
селект с умножением на 28
union
селект без умножения)
груп бай имя поля
ЗЫ Только незнаю потянет ли это парадокс
← →
korneley © (2008-04-14 16:21) [18]Интересно, а такое проканает?
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
← →
Новичек (2008-04-14 16:27) [19]
> селект из (
> селект с умножением на 28
> union
> селект без умножения)
> груп бай имя поля
Тоже так хотел сделать, но конструкция Select * From (Select ..) не работает.
← →
Savek (2008-04-14 16:33) [20]Тяжелый случай...
Тогда видится такой вариант:
два раза инсерт во временную таблицу, а потом уже оттуда селект
либо завести дополнительное поле в этой же таблице, тогда сначала два раза апдейт...
← →
Anatoly Podgoretsky © (2008-04-14 16:35) [21]> Новичек (14.04.2008 16:05:16) [16]
Запрос с UNION по границе раздела, в соответствии с логикой, результат ничем не отличается от IIF
← →
Anatoly Podgoretsky © (2008-04-14 16:36) [22]> korneley (14.04.2008 16:21:18) [18]
Вложенные запросы не потянет, а вот рыба от Savek очень даже свежая.
← →
korneley © (2008-04-14 16:41) [23]Гы... Я еще скопипастил криво:
AND DATE >= "02.03.2008"
во втором подселекте не на том месте :)))
← →
korneley © (2008-04-14 16:46) [24]2 раза "гы" вообще второй подзапрос как-то кривой :) От спешки все... Да и еще глюк есть: если селекты нил вовзвратят (хотябы один). Да и с Парадоксом нехорошо получилось... (с)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.05.11;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c