STRING_SPLIT

Snoopy1959

Benutzer
Beiträge
10
Hallo Zusammen,
in einer Tabelle habe ich Werte die durch ein Komma getrennt sind (Drucker pro Mitarbeiter)
Wie bekomme ich diese nun dynamisch in einzelne Felder?
[adlextensionAttribute3] (Varchar, 1000) null

Mein Versuch (ohne Erfolg)
SELECT TOP (1000) [adlDatInserted]
,[adlUsrInserted]
,[adlDatModified]
,[adlUsrMofified]
,[adlID]
,[adlCN]
,[adlemployeeNumber]
,[adlinitials]
,[adlGivenname]
,[adlSN]
,[adlname]
,[adlDisplayName]
,[adldescription]
,[adlpreferredLanguage]
,[adlDepartment]
,[adldirectReports]
,[adlPhysicalDeliveryOfficeName]
,[adlCO]
,[adlMail]
,[adlmailNickname]
,[adlTelephoneNumber]
,[adlMobile]
,[adlDistinguishedName]
,[adlwWWHomePage]
,[adlManager]
,[adlaccountExpiresOrig]
,[adlaccountExpires]
,[adlLastLogon]
,[adlST]
,[adlL]
,[adlPostalCode]
,[adlStreetAddress]
,[adlFacsimileTelephoneNumber]
,[adlwhenCreatedOrig]
,[adlwhenCreated]
,[adlTitle]
,[adlcodePage]
,[adlcountryCode]
,[adluserAccountControl]
,[adlCompany]
,STRING_SPLIT([adlextensionAttribute3],,) as Drucker
,[adlextensionAttribute4]
,[adlExtensionAttribute5]
,[adlExtensionAttribute6]
,[adlmsExchExtensionAttribute30]
,[adlmsExchExtensionCustomAttribute1]
,[adlmsExchExtensionCustomAttribute2]
,[adlmsExchExtensionAttribute16]
,[adlmsExchExtensionAttribute17]
,[adlmsExchExtensionAttribute18]
,[adlmsExchExtensionAttribute19]
,[adlmsExchExtensionAttribute20]
,[adlmsExchExtensionAttribute21]
,[adlmsExchExtensionAttribute22]
,[adlmsExchExtensionAttribute23]
,[adlmsExchExtensionAttribute24]
,[adlmsExchExtensionAttribute25]
,[adlmsExchWhenMailboxCreatedOrig]
,[adlmsExchWhenMailboxCreated]
,[adlEnabled]
,[adlStartDate]
,[adlEndDate]
FROM [P_ICT].[dbo].[tbl_AD_User]

Danke für Eure Hilfe
Snoopy
 
Werbung:
Code:
test=*# select * from snoopy ;
 id |           drucker           
----+-----------------------------
  1 | drucker1,drucker2, drucker4
  2 | drucker2,drucker3
(2 rows)

test=*# select id, case when drucker ~ 'drucker1' then 'x' else '' end as drucker1, case when drucker ~ 'drucker2' then 'x' else '' end as drucker2, case when drucker ~ 'drucker3' then 'x' else '' end as drucker3 from snoopy ;
 id | drucker1 | drucker2 | drucker3
----+----------+----------+----------
  1 | x        | x        |
  2 |          | x        | x
(2 rows)

Mit PostgreSQL gemacht. Dein Tabellendesign ist übrigens kapott.
 
Werbung:
soweit ich weiß, möglichst viele Spalten/Tabellen, bevor man mehrere Werte in eine Spalte "schmeißt".

Optimale Lösung in deinem Fall (meiner Meinung nach):
1 Tabelle Mitarbeiter (id, name)
1 Tabelle Drucker (id, typ)
1 Tabelle Zuweisungen (id, drucker, mitarbeiter)

Weil ich so hart viel Lust drauf habe gerade:
Code:
create table mitarbeiter(id serial primary key, name text unique);
create table drucker(id serial primary key, typ text unique);
create table zuweisungen(id serial primary key, drucker integer references drucker(id), mitarbeiter integer references mitarbeiter(id));
Um die Tabellen zu erstellen.

Jetzt einem Mitarbeiter zB 3 Drucker zuweisen, die vorher noch eingetragen werden:
Code:
insert into mitarbeiter(name) values ('Datenschutz');
insert into drucker(typ) values ('Drucker 1');
insert into drucker(typ) values ('Drucker 2');
insert into drucker(typ) values ( 'Drucker 3');
insert into zuweisungen(drucker, mitarbeiter) values (1, 1);
insert into zuweisungen(drucker, mitarbeiter) values (2, 1);
insert into zuweisungen(drucker, mitarbeiter) values (3, 1);

Jetzt einen select welcher Mitarbeiter welchen Drucker hat:
Code:
select mitarbeiter.name, drucker.typ from zuweisungen inner join mitarbeiter on (mitarbeiter.id = zuweisungen.mitarbeiter) inner join drucker on (drucker.id = zuweisungen.drucker);

Ergebnis:
i.png

EDIT:
wenn du bei einem getrennten Komma bleiben möchtest (keine Ahnung, wieso), dann kann das ein UI wie PHP zum Beispiel... (explode funktion)
 
Zurück
Oben