MS SQL - zapytanie

0

Witam
mam dwie tabele
Tabela1
id1 nazwa1
1 a
2 b
3 c
4 d

tabela2
id2 indeks2 nazwa2
1 1 test1
2 1 test2
3 2 test3
4 3 test4

i teraz wynik zapytania z tych dwoch tabel wyglada tak:

select id1,nazwa1,nazwa2 from tabela1 left outer join tabela2 on tabela1.id1=tabela2.indeks2
id1 nazwa1 nazwa2
1 a test1
1 a test2
2 b test3
3 c test4
4 d

a chcialbym aby wygladal tak:
id1 nazwa1 nazwa2
1 a test1+test2
2 b test3
3 c test4
4 d

Bardzo mi na tym zalezy, aby tak to wlasnie wygladalo.

0

Nie mozesz tego polaczyc po stronie klienta?

0

Niestety nie. Caly problem polega na tym, ze moge to zrobic tylko po stronie serwera. na razie zrobilem to za pomoca procedury, ktora tworzy View'a, ale nie jest to ladne rozwiazanie :/

0

Nic innego niz procedura mi do glowy nie przychodzi. Laczenie wierszy w jeden to nie jest naturalne podejscie dla bazy danych. Ja wprawdzie nie robilbym widoku, tylko procedura skladalaby string po kolei (np. korzystajac z kursora).

0

Niby tak. Ale Procedura wpisuje dane do tabeli chwilowej, z ktorej potem korzysta View. A musi byc tak, poniewaz View jest wczytywany juz po stronie klienta.
Znalazlem i dostalem pewne wskazowki jak to rozwiazac, ale zawsze koncza sie tym iz nalezy uzywac procedur lub funkcji.
Np. tutaj:
http://www.sql-server-helper.com/tips/comma-delimited-output.aspx

0

Może możesz napisać własną funkcję agregującą? Nie pisałem nigdy takowych w MSSQL, ale chyba powinno się dać (w Oraclu można). Np. agr_concat(kolumna, connector).

Wtedy pojechałbyś zwykłym GROUP_BY, a funkcja połączyłaby Ci stringi w każde grupie.

0

@Krolik: sprawdzalem czy takiej nie ma wbudowanej, ale nigdy nie widzialem, zeby takie cuda sie dalo zrobic w mssql. Chetnie sie dowiem, jesli mozna :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1