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

Вниз

Помогите с запросом к 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.022 c
3-1196844514
em240
2007-12-05 11:48
2008.05.11
MsSql+Job+обработка ошибки


2-1208092380
Снежинка
2008-04-13 17:13
2008.05.11
Вычисление среднего балла


2-1207743757
Kolan
2008-04-09 16:22
2008.05.11
Как заполнить статический массив записей.


2-1207841263
smartleds
2008-04-10 19:27
2008.05.11
Подскажите в чем может быть причина создаю массив меток таким


2-1208175871
assassin8899
2008-04-14 16:24
2008.05.11
AQL запрос