Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1207994821
ZzZz
2008-04-12 14:07
2008.05.11
Minimize


2-1208195427
San1712
2008-04-14 21:50
2008.05.11
Как скопировать поля Items[0].Caption и Items[0].SubItems ?


2-1207943501
Megabyte
2008-04-11 23:51
2008.05.11
Скрытый ввод - готовый компонент


15-1206343589
Ega23
2008-03-24 10:26
2008.05.11
Возможно ли в Windows получение текущего времени


2-1207819934
Chorniy
2008-04-10 13:32
2008.05.11
Опять ReadProcessMemory :( теперь у всех процессов одни данные?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский