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

Printed on: May 4, 2024 at 14:05 o'clock

Member: NetWolf
NetWolf Jun 20, 2012 at 14:18:03 (UTC)
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)
Member: LianenSchwinger
LianenSchwinger Jun 20, 2012 updated at 15:13:53 (UTC)
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
Member: Pjordorf
Pjordorf Jun 21, 2012 at 00:05:04 (UTC)
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
Member: pwarrior
pwarrior Jun 21, 2012 at 06:52:34 (UTC)
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
Member: pwarrior
pwarrior Jun 21, 2012 at 06:54:58 (UTC)
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.
Member: LianenSchwinger
LianenSchwinger Jun 21, 2012 at 07:07:23 (UTC)
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