DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren



 

Forum: SQL | Thema: Re: SELECT statement | Von: Daniel Röber ( 10.01.2005 17:18)

Hallo Marcus,

bevor Du weiter ueber dieses Problem gruebelst, solltest Du unbedingt Deine Tabellenstruktur ueberdenken, ich spiele hier direkt auf NORMALISIERUNG an, es gibt Hunderte, wenn nicht Tausended Hits bei Google, wenn Du danach suchst (NORMALISIERUNG SQL lang schon).

Grundsaetzlich wirst Du Dich mit der momentanen Struktur uebelst schwer tun, da Du pro Person nur ein Telefoneintrag zufuegen kannst, musst Du die jeweilige Person mehrmals in Deiner PERSONEN Tabelle einfuegen, um verschiedene Telefonnummern einer Peson zuzuweisen.

Vorschlag:
3 Tabellen

PERSONEN:

CREATE TABLE [Personen] (
[KontaktID] [int] IDENTITY (1, 1) NOT NULL ,
[Nachname] [nvarchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Vorname] [nvarchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Firma] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
CONSTRAINT [PK_Personen] PRIMARY KEY CLUSTERED
(
[KontaktID]
) ON [PRIMARY]
) ON [PRIMARY]
GO

TELEFON:

CREATE TABLE [Telefon] (
[TelefonID] [int] IDENTITY (1, 1) NOT NULL ,
[TelefonNummer] [nvarchar] (16) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[KontaktID] [int] NOT NULL ,
[TypeID] [smallint] NOT NULL ,
CONSTRAINT [PK_Telefon] PRIMARY KEY CLUSTERED
(
[TelefonID]
) ON [PRIMARY] ,
CONSTRAINT [FK_Telefon_Personen] FOREIGN KEY
(
[KontaktID]
) REFERENCES [Personen] (
[KontaktID]
),
CONSTRAINT [FK_Telefon_TelefonTyp] FOREIGN KEY
(
[TypeID]
) REFERENCES [TelefonTyp] (
[TypeID]
)
) ON [PRIMARY]
GO

TELEFONTYP:

CREATE TABLE [TelefonTyp] (
[TypeID] [smallint] IDENTITY (1, 1) NOT NULL ,
[Code] [nvarchar] (16) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
CONSTRAINT [PK_TelefonTyp] PRIMARY KEY CLUSTERED
(
[TypeID]
) ON [PRIMARY]
) ON [PRIMARY]
GO

Da Du spaeter weisst wieviele unterschiedliche TelefonTypen Du hast, koenntest Du folgendermassen abfragen (also des ist jetzt soweit die einfachste die ich gefunden habe):

SELECT P.Vorname
,P.Nachname
,ISNULL(P.Firma,' - ') AS Firma
,MAX(CASE WHEN T.TypeID = 1 THEN T.TelefonNummer ELSE ' - ' END) AS Privat
,MAX(CASE WHEN T.TypeID = 2 THEN T.TelefonNummer ELSE ' - ' END) AS Mobil
,MAX(CASE WHEN T.TypeID = 3 THEN T.TelefonNummer ELSE ' - ' END) AS Büro
,MAX(CASE WHEN T.TypeID = 4 THEN T.TelefonNummer ELSE ' - ' END) AS Fax
FROM Personen AS P
INNER JOIN Telefon AS T
ON P.KontaktID = T.KontaktID
GROUP BY
P.Vorname
,P.NachName
,Firma
ORDER BY P.VorName

Da waeren noch viele viele andere Moeglichkeiten ... bei weiteren Fragen ... einfach posten ... :P


HAPPY PROGRAMMiNG


DAN










Betreff Von Datum
Re: SELECT statement
Hi.<br>Die Tabellenstruktur ist leider in Stein gemeißelt, da sie aus einem CRM-System stammt. Natürlich könnte ich jetzt den Hersteller bitten, die Tabellensztruktur zu ändern, male mir da aber keine...
G. Guest 18.02.2005 10:01
Re: SELECT statement
Hi Marcus :-)<br><br>Man nehme mal zwei von deinen Tabellen. Personen und Telefon.<br><br>Personen (id, name, vorname)<br>Telefon (personenid, nummer, typ)<br><br>Als typ definiere ich mal 4 verschiedene: work,...
Thomas Golla 18.02.2005 10:48

Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!

 Betreff:
 Nachricht: Den Beitrag finden Sie nun unter: http://beta.devtrain.de/foren Die Benutzerdaten und Foreninhalte von beta.devtrain.de und www.devtrain.de sind die selben.
Sie können sich dort sogar per RSS über neue Inhalte informieren lassen.
Bei Problemen bitte direkt Mail an asp [AT] ppedv.de.

 Signatur:

  



Login
Username:


Passwort:






Passwort vergessen?

Building und Connecting Know-how

© Copyright 2003 ppedv AG