pwarrior
Goto Top

MS SQL Server 2008 Views in Datenbanken sinnvoll Selektieren bzw. Verbinden

Hallo zusammen,

Ich habe Views mit Preislisten.

1.KuPreisAllg(Allgemeiner Artikel Preis)
-ArtikelNr
-KundenNr
-Bezeichnung1
-Bezeichnung2
-Einzelpreis

2.KuPreisSpez (Spezieller Kunden Artikel preis)
-ArtikelNr
-KundenNr
-Bezeichnung1
-Bezeichnung2
-Einzelpreis

3. ArtKaPreis (Artikelnummern und Preise der Kategorie zuordnen)
-Artikelnummer
-KategorieID
-Einzelpreis
-Bezeichnung1
-Bezeichnung2

4.KuPreiKat (Kunden der Kategorie zuordnen)
-Kundennr
-PreisKatID


Wie kann ich nun per SQL SELECT eine Artikelliste mit seinen Preisen generieren? Bedingungen:
1. Vermtl. Schleife die jeden Artikel durchgeht
2. Hat der Kunde spezielle Preise auf den Artikel Wenn Nein Schritt 3 sonst ENDE
3. Hat der Kunde Kategorische Preise auf den Artikel Wenn Nein Schritt 4 sonst ENDE
4. Allgemeinen Preis dem Kunden für den Artikel zuweisen.

Alleine bei der Abfrage der Preise komme ich nicht weiter.
Hier mein Ansatz (Aber leider 2 Werte drin):

SELECT DISTINCT
	 ArtikelNr
	,KundenNr
	,Bezeichnung1
	,Bezeichnung2
	,Einzelpreis
FROM KuPreisAllg
WHERE KundenNr = '...'   
UNION ALL
SELECT DISTINCT
	 ArtikelNr
	,KundenNr
	,Bezeichnung1
	,Bezeichnung2
	,Einzelpreis
FROM [KuPreisSpez
WHERE KundenNr = '...'  
ORDER BY ArtikelNr;

Content-Key: 186785

Url: https://administrator.de/contentid/186785

Ausgedruckt am: 29.03.2024 um 07:03 Uhr

Mitglied: NetWolf
NetWolf 20.06.2012 um 16:18:03 Uhr
Goto Top
Moin Moin,

hast du schon mal etwas von Normalisierung gehört?

Deine Tabellen (mit den dort gespeicherten Informationen) machen keinen Sinn, da dort globale Informationen mehrfach vorkommen. Es ist nicht ersichtlich, was eine Tabelle und was ein View ist face-sad

Könntest du dein ERM mal hier veröffentlichen?

Grüße aus Rostock
Wolfgang
(Netwolf)
Mitglied: LianenSchwinger
LianenSchwinger 20.06.2012 aktualisiert um 17:13:53 Uhr
Goto Top
Hallo,

hier mal mein Schuss aus der Hüfte face-smile

select a.ArtikelNr, a.KundenNr, a.Bezeichnung1, a.Bezeichnung2, 
       NVL(NVL(d.Einzelpreis,c.Einzelpreis),a.Einzelpreis) Preis
from KuPreisAllG a 
left join KuPreiKat b on b.KundenNr = a.KundenNr
left join ArtKaPreis c on c.Artikelnummer = a.ArtikelNr and c.KategorieID = b.PreisKatID
left join KuPreisSpez d on d.KundenNr = a.KundenNr and d.ArtikelNr = a.ArtikelNr
where a.KundenNr = '&Kunde'  

Dabei bin ich davon ausgegangen, dass die Bezeichnungen gleich sind und es für jede Kombination Artikel/Kunde mindestens den allgemeinen Preis gibt.
KuPreisAllg sollte aus meiner Sicht aber Kundenunabhängig sein, da man ja sonst direkt Spezialpreise machen könnte. face-smile

Gruß Jörg
Mitglied: Pjordorf
Pjordorf 21.06.2012 um 02:05:04 Uhr
Goto Top
Hallo,

Zitat von @pwarrior:
Ich habe Tabellen bzw. Views mit Preislisten.
Wobei wir das hier mit deinen uns gelieferten Informationen nicht unterscheiden können.

Und dein
MS SQL 4 Datenbanken
stimmt so ja auch nicht. Du hast wohl eine (1) Dantenbank. Der datenbankhersteller ist MS und du hastden SQL Server XXXX (ja, da gibt es deutliche unterschiede). In deiner datenbank hats du hier jetzt vier (4) Tabellen (Obwohl das hier auch Views sein können. Innerhalb einer Datenbank sind die verschiedenen Elemente (Tabellen, Views, Abfragen usw.) dort drinnen zusammengefassst. Du siehst auf Dateiebene nur die 2 Dateien (meistens nur 2 aber nicht zwingend) welche deine Datenbank mit all ihren Internen elementen ausmacht. Somit ist deine Aussage du hast 4 SQL Datenbanken hier einfach nicht richtig.

Gruß,
Peter
Mitglied: pwarrior
pwarrior 21.06.2012 um 08:52:34 Uhr
Goto Top
Vielen Dank,

deine Antwort hat es gelöst:
Nur das die NVL in MSSQL Coalesce heißt.

select a.ArtikelNr, a.Bezeichnung1, a.Bezeichnung2,
COALESCE(COALESCE(d.Einzelpreis,c.Einzelpreis),a.Einzelpreis) Preis
from KuPreisAllG a
left join KuPreisKat b on b.KundenNr = a.KundenNr
left join ArtKatPreis c on c.Artikelnummer = a.ArtikelNr and c.ListeID = b.PreisKatID
left join KuPreisSpez d on d.KundenNr = a.KundenNr and d.ArtikelNr = a.ArtikelNr
where a.KundenNr = '$Kunde'
ORDER BY ArtikelNr;

Ich finde es echt super, das hier doch noch einige ihre "Schüsse aus der Hüfte" mitteilen und nicht darauf rumreiten "Das hast du Falsch beschrieb, und hier muss noch was hin. Vielen Danke
LianenSchwinger
Mitglied: pwarrior
pwarrior 21.06.2012 um 08:54:58 Uhr
Goto Top
Jetzt muss das Ergebnis noch per CSV exportiert werden, ich mache mich erstmal selbst schlau, wer aber auf Anhieb drauf kommt. Kann es mir gerne mitteilen.
Mitglied: LianenSchwinger
LianenSchwinger 21.06.2012 um 09:07:23 Uhr
Goto Top
Hallo,

komme halt aus der Oracle-Welt face-smile
Schön, dass man helfen konnte.

Ich versuche erst garnicht groß das Datenbankdesign zu hinterfragen, da man eventuell gar keine Chance hat darauf Einfluß zu nehmen. Man kann auf sowas wie Normalisierung hinweisen und sich aber dennoch um einen ersten Lösungsansatz bemühen. Was mich besonders irrietiert ist das "rumreiten" auf Tabelle oder View. Für den Select ist es doch völlig unerheblich. Oder ist das beim MS SQL-Server anders?!?

Also noch einen schönen Tag und hoffentlich noch die Lösung für Dein CSV-Problem. Vielleicht wäre es ratsam hierfür ein neues Thema zu erstellen, da diese Frage hier keiner vermutet. face-smile

Und später nicht vergessen die Frage auf "gelöst" zu setzen.

Gruß Jörg