PDA

Vollständige Version anzeigen : Werte aus Spalte in eine Zelle zusammenfassen


alltagsheld70
10.12.2014, 12:44
Hallo, ich suche nun schon eine ganze Weile nach einer Lösung, die mir in Access 2007 (Abfrage, SQL) Folgendes liefert.

Basis ist eine Tabelle wie folgt:

ONKz ASB
4711 1
4711 5
4711 7
... ...

Ergebnis soll sein

ONKz ASB
4711 1 / 5 / 7

Meine Suche hat bis jetzt ergeben, dass es den SQL-Befehl CONCAT gibt, allerdings funktioniert das im SQL-Statement der Abfrage nicht.
Mein SQL-Code sieht wie folgt aus:

SELECT [Tabelle1].ONKz, CONCAT([Tabelle1].ASB) as FULLASB
FROM [Tabelle1];

Die Fehlermeldung lautet: "Undefinierte Funktion 'CONCAT' in Ausdruck

Wie bringe ich MS Access SQL bei, das zu tun, was ich gerne hätte?

Danke im Voraus!
Markus

CSekulla
10.12.2014, 13:12
Hi
SQL-Befehle gibt es viele, genauso wie Dialekt.
Man sollte schon nachsehen, ob die SQL-Maschine dazu komplatibel ist.

In Access gibt '&' und '+'. Ist auch viel flexibeler als Concat.
Carsten

hcscherzer
10.12.2014, 15:59
@Markus: hast Du nicht gelesen, dass in der FAQ keine Fragen gestellt werden sollten?
@Carsten: in TSQL gibt's das '+' und in JetSQL (Access) das '&' zum Verketten von Texten.

CSekulla
10.12.2014, 16:55
@Marus
nicht ganz, auch das '+' geht und ist NULL-sensitiv, im Gegensatz zum '&'.
Damit geht folgendes (ohne IIF, NVL und co.)
SELECT ([Co_Titel]+' ') & ([Co_Vorname]+' ') & [Co_NachName] AS VollName
FROM Adr AS BA;
Tschüß CS

einmal_ich
16.12.2014, 12:01
Select mit deinen Daten

SELECT TOP 1 a.ONKZ + N' / ' + a.ASB + ' / ' + b.ASB + ' / ' + c.ASB AS teste
FROM dbo.[0000_teste] a INNER JOIN
dbo.[0000_teste] b ON a.ONKZ = b.ONKZ AND NOT (b.ASB = a.ASB) INNER JOIN
dbo.[0000_teste] c ON c.ONKZ = a.ONKZ AND NOT (c.ASB = a.ASB) AND NOT (c.ASB = b.ASB)
WHERE (a.ONKZ = 4711) AND (a.ASB = 1)

Besser ist eine Funktion:

CREATE FUNCTION dbo.Zeilen
(

@auft nvarchar(4)

)

RETURNS nvarchar(200)

AS

BEGIN

DECLARE @intErgebnis nvarchar(200), @Stck int , @asb nvarchar(2)
set @intErgebnis=@auft

IF exists(SELECT * FROM dbo.[0000_teste] WITH (nolock) Where ONKZ = @auft)
begin
select @Stck =count(ONKZ) from dbo.[0000_teste] WITH (nolock) Where ONKZ = @auft
Select @asb = ASB from dbo.[0000_teste] WITH (nolock) Where ONKZ = @auft Order by ASB Desc
select @intErgebnis=@intErgebnis+' / '+@asb
While @Stck >1
begin
select @intErgebnis=@intErgebnis+' / '+ASB, @asb=ASB from dbo.[0000_teste] WITH (nolock) Where ONKZ = @auft and cast(asb as int) >cast(@asb as int)
select @Stck=@Stck-1
end


end


RETURN @intErgebnis

Diese ist dynamisch..

Das ganze klingt nach ONKZ Ortsnetzkennzahl / ASB Anschlussbereich

Gruß Detlef