Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с запросом к Paradox [D5, Paradox]


Страницы:   1 2

Новичек ©   (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?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо