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

Вниз

Функции агрегирования для строк в SQL   Найти похожие ветки 

 
Wild   (2002-05-23 16:22) [0]

такая фигня

есть две таблицы

T1
=====
ID
....

и

T2
====
ID
T1_ID
Value

Мне, например, надо узнать какие T2.Value относятся к каждой записи в T1

select T1.ID, T2.Value from T1,T2 where T2.T1_ID=T1.ID

Ну он мне типа выдаст:

ID Value
==== ========
1 1
1 2
1 3
2 1
2 2
3 3

А вот можно вот что бы так:
ID Value
==== ========
1 1,2,3
2 1,2
3 3


 
xGrey   (2002-05-23 17:40) [1]

Если я правильно понял вопрос, то то,что Вы назаваете "ф-цией агрегирования строк" придется писать самому. Примерный вариант на Oracle:

function GetStr(inT1_id in integer) return varchar2 as
s varchar2(10000);
begin
for r in
(select value from t2 where t2.T1_ID=inT1_id)
loop
s:=s||to_char(r.value)||",";
end loop;
return s;
end;

Вызов:
select t1.id, GetStr(t1.ID) from t1
order by t1.id


 
Johnmen   (2002-05-23 17:41) [2]

А вот так чтобы так - НЕЛЬЗЯ...


 
Johnmen   (2002-05-23 17:46) [3]

>xGrey ©
Ты уверен, что конструкция рабочая ?
for r in (select value from t2 where t2.T1_ID=inT1_id)

я бы сначала проверил... :)



 
xGrey   (2002-05-23 17:55) [4]

Для Oracle - рбочая, проверял. Там так можно организовать курсорный цикл и неявно инициализировать переменную курсорного цикла.


 
sniknik   (2002-05-23 18:42) [5]

аналог для MSSQL

CREATE function GetStr (@id int)
RETURNS varchar (8000)
AS
BEGIN
DECLARE @Ret varchar (8000)
DECLARE @S varchar (8000)
DECLARE CountCur CURSOR FOR
SELECT CAST(PRICERUB AS varchar (8)) FROM CASHSAIL WHERE [Id] = @id
OPEN CountCur
FETCH NEXT FROM CountCur INTO @Ret
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM CountCur INTO @S
SET @Ret= @Ret + "," + @S
END
CLOSE CountCur
DEALLOCATE CountCur
RETURN @Ret
END

select [id], dbo.GetStr([id]) from cashsail
order by [id]



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

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

Наверх





Память: 0.45 MB
Время: 0.025 c
3-55012
Wild
2002-05-23 16:22
2002.06.17
Функции агрегирования для строк в SQL


1-55089
Siniy Slonik
2002-06-06 03:47
2002.06.17
TEdit


14-55274
Olgerd
2002-05-11 19:49
2002.06.17
А ты добавил свою функцию в UBPFD?


7-55341
Keymaster
2002-03-15 23:50
2002.06.17
PCL


1-55062
Sokoloff
2002-06-05 17:48
2002.06.17
Продвинутый stringgrid





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