Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];

Вниз

Аггрегатные функции для строковых величин   Найти похожие ветки 

 
Vick   (2003-12-26 11:45) [0]

Доброго всем дня.

Помню был в форуме такой вопрос, не могу найти: в общем есть табличка вида

NAME PRICE
-------------
aa 10
vv 52
cc 12
dd 25


Нужно построить аггрегатный запрос таким образом чтобы в результате получилось:

NAME PRICE
------------------------
aa, vv, cc, dd 99


 
Sandman25   (2003-12-26 11:52) [1]

Без хранимой процедуры не обойтись.


 
paul_k   (2003-12-26 12:14) [2]

1. зачем подкладывать себе грабли.
(пример - 3000 строк сложи так. на бумаге. посчитай длину результата. как ты их передаш?)
2. если уж очень хочется то надо городить курсор и в нем все это клеить. причем в переменную типа text
А лучше, все-таки в постановке задачи ковырятся.
ну не встречал я ещё таких отчетов где данный вариант может понадобится.


 
Johnmen   (2003-12-26 12:22) [3]

>paul_k ©
>ну не встречал я ещё таких отчетов где данный вариант может понадобится.

Это потому, что бухгалтерских программ не писал...:)


 
LordOfSilence   (2003-12-26 12:23) [4]

Самый простой способ - добавить еще одно поле "ТипТовара",
для всех этих элементов "aa, vv, cc, dd" установить в одно и
тоже значение, потом группировать по нему и суммировать.
Конечно же, в таком случае ты не получишь конкатенацию строк
"aa, vv, cc, dd", но зато просуммируешь. ;-)

Вика, поделись замыслом - какой физический/логический смысл
имеет сумма цен?
Пример:
цена килограмма яблок - 30 руб.
цена бутылки пива - 15 руб.
итого: "пиво, яблоки" - 45 руб.


 
paul_k   (2003-12-26 12:26) [5]

2 Johnmen
ну.. может быть.. хотя всяческие депозитарии, бекофисы,( и прочий учет ЦБ), оперкассы тоже много всяких красивых отчетов требуют. Так вот нет такого места где все это на уровне построителя отчетов не решается.


 
Vick   (2003-12-26 12:27) [6]


> paul_k ©


Бухгалтерии только дай повод, она и не такое придумает. Постановку данной задачи я конечно утрировала, но она примерно такая же.


 
paul_k   (2003-12-26 12:31) [7]

Вик а ты воли им не давай.
У бугалтеров есть хотелки а постановку задачи прорабатывают отнюдь не они.
Есть документация нормативная, где 90% форм отчетов и зафиксированы. А подобные твоему решения я всегда умудрялся отдать в виде списка с подписью ИТОГО СУММА:


 
paul_k   (2003-12-26 12:34) [8]

кстати а отчеты в чем рисуеш?


 
roottim   (2003-12-26 12:35) [9]

> аггрегатный запрос
может нужен просто крос-таб отчет !


 
Vick   (2003-12-26 12:35) [10]


> LordOfSilence ©


Леш, ну ты как маленький :)))) Пора бы уже не удивляться моим вопросам.
На самом деле я под NAME подразумевала месяц, а под PRICE сумму оплаты. Предположим, что есть еще одно поле ORG - организация.
То хотелось бы, чтобы результат запроса имел такой вид, сгруппированный по ORG:

ORG NAME PRICE
-----------------------------------------
МММ янв., фев. 450
ДДД янв., фев., мар. 752
ссс мар., апр. 345


 
Sandman25   (2003-12-26 12:38) [11]

[10] Vick © (26.12.03 12:35)

Так это же совершенно другое дело - тут есть принципиальное ограничение на 12 записей.


 
Vick   (2003-12-26 12:38) [12]


> paul_k ©


А мне постановку не бухгалтерия делает, а зам. ген. директора по информационыым технологиям - мой начальник!!!!


 
Term   (2003-12-26 12:42) [13]

хранимая процедура однозначно, и мучиться не надо


 
paul_k   (2003-12-26 12:45) [14]

2 Vick
ну вот.. очередной урок телепатии надо брать...
1. в том виде как задан вопрос ответ единственный - уволить постановщика.
2 вот Vick © (26.12.03 12:35) [10] уже вносит ясность, но так как посавлен вопрос ты получиш запись в отчете вида

ORG NAME PRICE
-----------------------------------------
МММ янв., фев., фев. ... 450
ДДД янв., фев., мар. 752
ссс мар., апр. 345

то есть чтоб было гуд сначала надо сгородить временную таблицу, куда сложить помесячно суммы по оргвнизациям за год. (организация + месяц + год - уникальное значение)
а уже на этой таблице строить отчет


 
LordOfSilence   (2003-12-26 12:46) [15]

Сегодня предновогодняя тяпница, день по определению флеймовый.
А я и есть маленький. Ну что ты хочешь? 168 см. росту во мне ;-)

Слушай, вот эти твои "янв., фев., мар." по сути есть кварталы.
А по кварталам в MSSQL сгруппировать можно. Может поможет?

В Books Online посмотри по ключевому слову Pivot.
Лично я так не делал, так как занимаюсь OLAP-анализом,
поэтому эти ухищрения непосредственно в MSSQL мне безо
всякой надобности, сама понимаешь.


 
Vick   (2003-12-26 12:52) [16]

Как хорошо работать с финансовым отделом, они такие замечательные постановки делают, не то что бухгалтерия!!!!!


 
LordOfSilence   (2003-12-26 12:56) [17]

2 Vick © (26.12.03 12:52) [16]
Не шуми, эти люди тебе зарплату начисляют ;-)


 
paul_k   (2003-12-26 12:56) [18]

2 Vik
а как славно если между тобой и "заказчиком" сидит грамотный постановщик с правами послать заказчика с такими хотелками в лес.
но это, увы, лишь мечты


 
Vick   (2003-12-26 13:02) [19]


> paul_k ©


твои слова да Богу в ухи!!!!! Но я всего один программер в организации и посему мне тут этого не видать!!! Эх, пора в декретный отпуск!!!!


 
paul_k   (2003-12-26 13:03) [20]

2 Vik
так в чем ты отчеты рисуеш?


 
Vick   (2003-12-26 13:05) [21]


> paul_k ©


FastReport. Но эти данные выводятся исключительно только в грид.


 
LordOfSilence   (2003-12-26 13:08) [22]

2 Vick © (26.12.03 13:02) [19]
Вот!!! А вот это уже правильная мысль! :-)))
Двигайся в этом направлении. Мужиков-программистов - как собак
нерезанных, тебя всегда смогут подменить. :)))
А родить человека сможет только женщина, так что не теряй времени. ;-)


 
Vick   (2003-12-26 13:11) [23]


> LordOfSilence ©


Дык дети от Святого Духа тож не появляются, тут уж мужиков никто не заменит :))) А задачу пока все равно решить нужно!!!

Я так поняла нужно писать геморойную процедуру.


 
paul_k   (2003-12-26 13:27) [24]

Геморойную не надо. есть идея ша проверю и кину


 
paul_k   (2003-12-26 13:34) [25]

проставить номер месяца и его "вес" в строке.
после суммирования sum(mons_no*str_pos)
получим число. при выдаче наружу в строку его и разобрать строку.
примерно так
declare @mons_sum numeric(18,0),
@mons_sum_str varchar(18)
set @mons_sum=1000000000000000+1+2*10+3*100+4*1000+5*10000+6*100000+7*1000000+8*10000000+9*100000000+convert(numeric,10)*100 0000000+convert(numeric,11)*100000000000+convert(numeric,12)*10000000000000
select @mons_sum
set @mons_sum_str=Ltrim(rtrim(convert(varchar,@mons_sum)))
select case
when SUBSTRING(@mons_sum_str, 16,1)<>"0" then "январь, "
end +
case
when SUBSTRING(@mons_sum_str, 15,1)<>"0" then "февраль, "
end +
case
when SUBSTRING(@mons_sum_str, 14,1)<>"0" then "Март, "
end +
case
when SUBSTRING(@mons_sum_str, 13,1)<>"0" then "Апрель, "
end +
case
when SUBSTRING(@mons_sum_str, 12,1)<>"0" then "Май, "
end


 
Курков Михаил   (2003-12-26 15:14) [26]

Если есть таблица
T (Name, Month, Price) и при этом известно, какие значения могут быть в Month результат можно получить так:

select
Name,
MonthSum =
max(case when Month = "Янв" then "Янв," end) +
max(case when Month = "Фев" then "Фев," end) +
max(case when Month = "Мар" then "Мар," end) +
... ,
sum(Price)
from
T
group by
Name


 
just me   (2003-12-26 15:34) [27]

Пример функции для "сбора" строки NAME:
CREATE FUNCTION lr_GetNAMEs ()
RETURNS varchar(8000)
AS
BEGIN
DECLARE @names varchar(8000)
SET @names = ""
-- no cursor!!!
SELECT @names =
CASE @names
WHEN "" THEN ISNULL(RTRIM(LTRIM(NAME)), "")
ELSE @names + ", " + ISNULL(RTRIM(LTRIM(NAME)), "")
END
FROM Table -- WHERE <some criteria>
RETURN(@names)
END


 
Vick   (2003-12-26 15:39) [28]


> Курков Михаил


Спасибо!!!!!!


 
Sandman25   (2003-12-26 16:00) [29]

[26] Курков Михаил (26.12.03 15:14)

Обалдеть...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.008 c
14-72882
Nomolos
2004-01-02 17:25
2004.01.23
Кто блин украл мой ник????


1-72706
pirat
2004-01-12 10:19
2004.01.23
установка своего скринсейвера как текущего


3-72635
Savage
2003-12-27 10:08
2004.01.23
Хитрый SELECT...


1-72709
emperor
2004-01-11 23:25
2004.01.23
Adobe PDF


1-72703
Danilas
2004-01-12 03:15
2004.01.23
Подскажите пожалуйста!!! Как сохранить в файл содержимое....





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