Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.17;
Скачать: CL | DM;

Вниз

Функции агрегирования для строк в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
1-55143
Григорий Ситнин
2002-06-03 17:49
2002.06.17
.Show из DLL


1-55190
Alexander_D6_XP
2002-06-04 18:04
2002.06.17
сделать Ctrl+Enter в TMemo?!


4-55353
_TOLTEC
2002-04-15 02:12
2002.06.17
Хендл окна


8-55223
sscorp2000
2002-02-04 13:32
2002.06.17
Сохранить Bitmap c другим разрешением?


1-55138
Goblinus
2002-06-03 23:23
2002.06.17
Преобразование из Char в Integer и обратно