Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Inhalt einer Tabelle als neue Felder (https://www.delphipraxis.net/189673-inhalt-einer-tabelle-als-neue-felder.html)

llaprosper 7. Jul 2016 16:17

Datenbank: SQL • Version: 2012 • Zugriff über: Management Studio

Inhalt einer Tabelle als neue Felder
 
Hallo Zusammen,

ich bin SQL Anfänger und habe keine Ahnung wie ich eine Tabelle für mich vernünftig nutzen kann.
So sieht es aus:
Key Value Attribut

001 Name1 P0002-NACHN
001 Nummer1 P0002-Nr
001 Anrede1 P0002-An
001 Geschlecht1 P0002-G
002 Name2 P0002-NACHN
002 Nummer2 P0002-Nr
002 Anrede2 P0002-An
002 Geschlecht2 P0002-G

Der Key ist die Personalnummer eines Users
Ich muß die Daten in eine andere Datenbank importieren. Dort gibt es z.B. die Tabelle "Person" wo dann jeweils für die Personen die
Attribute aus Feld "Attribut" importiert werden müssen.
Jetzt habe ich hier im Feld "Value" aber ALLE User. Damit kann ich ja nix anfangen. Es müsste also so aussehen:

Pers Name Nummer Anrede Geschlecht

001 Name1 Nummer1 Anrede1 Geschlecht1
002 Name2 Nummer2 Anrede2 Geschlecht2

Habt ihr da eine Idee?

Beste Grüße
Andreas

Sir Rufo 7. Jul 2016 16:49

AW: Inhalt einer Tabelle als neue Felder
 
Ungefähr so
SQL-Code:
SELECT
  k.Key as Pers,
  nachn.Value as Name,
  nr.Value as Nummer,
  an.Value as Anrede,
  g.Value as Geschlecht
FROM ( select distinct Key from table1 ) k
JOIN ( select Key, Value from table1 where Attribut='P0002-NACHN' ) nachn ON nachn.Key=k.Key
JOIN ( select Key, Value from table1 where Attribut='P0002-Nr' ) nr ON nr.Key=k.Key
JOIN ( select Key, Value from table1 where Attribut='P0002-An' ) an ON an.Key=k.Key
JOIN ( select Key, Value from table1 where Attribut='P0002-G' ) g ON g.Key=k.Key

llaprosper 7. Jul 2016 16:56

AW: Inhalt einer Tabelle als neue Felder
 
Cool...Danke. Werde ich morgen auf der Arbeit mal probieren. Jetzt mache ich mal Feierabend!!

Gruß
Andreas

llaprosper 7. Jul 2016 17:34

AW: Inhalt einer Tabelle als neue Felder
 
Klappt nicht:
Msg 156, Level 15, State 1, Line 6
Incorrect syntax near the keyword 'FROM'.
Msg 102, Level 15, State 1, Line 6
Incorrect syntax near 'k'.
Msg 102, Level 15, State 1, Line 7
Incorrect syntax near 'nachn'.
Msg 102, Level 15, State 1, Line 8
Incorrect syntax near 'an'.

SELECT
k.[Key] as Pers,
nachn.[Value] as Name,
an.[aValue] as Anrede,
FROM ( select distinct [Key] from [mxmc_db].[dbo].[table1] ) k
JOIN ( select Key, aValue_neu FROM [mxmc_db].[dbo].[table1] where AttrName='P0002-NACHN' ) nachn ON nachn.Key=k.Key
JOIN ( select Key, Value FROM [mxmc_db].[dbo].[table1] where AttrName='P0002-TEXT_P0002_ANRED' ) an ON an.Key=k.Key

vagtler 7. Jul 2016 17:39

AW: Inhalt einer Tabelle als neue Felder
 
Überprüfe die Syntax Deines Statements.

Sir Rufo 7. Jul 2016 17:44

AW: Inhalt einer Tabelle als neue Felder
 
Wie schnell doch so ein Morgen kommt :stupid:

Darum schrieb ich ja auch "Ungefähr so". Das konkrete Statement für MSSQL musst du dir selber zusammenbauen, aber das Prinzip bleibt gleich.

llaprosper 7. Jul 2016 17:58

AW: Inhalt einer Tabelle als neue Felder
 
Hatte keine Ruhe :-)
Hab es jetzt hin bekommen.
Allerdings stimmen nur Nachname und Anrede
Habe jetzt noch ein Join hinzugefügt mit Vorname und das ganze mal mit Where auf einen einzigen Key dezimiert.
Jetzt habe ich tausend mal den selben Key (mich in diesem Fall) da jeder Vorname genommen wird und nicht nur meiner.

Edit:
Sorry, hatte nen Fehler eingebaut...Alles klappt
TOP DANKE!!

Sir Rufo 7. Jul 2016 18:24

AW: Inhalt einer Tabelle als neue Felder
 
:thumb:

Ich hoffe ja mal, dass du einen Index auf Key und Attribut hast (unique oder sogar als primary key) sonst wird diese Abfrage mit steigenden Datensätzen schnarchlangsam.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz