Главная страница
    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.008 c
2-1207916107
Alral
2008-04-11 16:15
2008.05.11
TWebBrowser- получение HTML


15-1206907417
rgrgre
2008-03-31 00:03
2008.05.11
Звук и в наушниках и так


2-1207832097
Polar
2008-04-10 16:54
2008.05.11
Направление текста в QRLabel


4-1188108766
Bora.ru
2007-08-26 10:12
2008.05.11
Убрать значок процесса из TaskBar


2-1207770561
Polar
2008-04-09 23:49
2008.05.11
MessageDlg на русский язык





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский