View Erstellung sehr langes Statement mit CASE

CharlyOli

Aktiver Benutzer
Beiträge
31
Hallo Zusammen,

ich möchte in einer View einen Spalten Wert über ein CASE Statement ermitteln, was auch klappt.
Aufgrund einer neuen Vorgabe musst ich mein Case Statement verlängern, so dass es anscheinend jetzt zu lange ist.
Hättet ihr einen Tip, wie man in so einem Fall umgeht?

Das ist mein Case Statement :)
Würde funktionieren, aber es ist zu lang für die Spalte....

CASE
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = '00' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = '00' AND dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '00' THEN '00-0'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = 'A' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = '00' dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '00' THEN '04-0'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = '00' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = '00' AND dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '06' THEN '06-0'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = 'F' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = '00' AND dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '00' THEN '13-0'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = '00' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = 'F' AND dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '00' THEN '13-1'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = 'F' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = 'F' AND dbo.View_3E_PRODUKTE_VARIANTEN_01.farbeA_id = dbo.View_3E_PRODUKTE_VARIANTEN_01.farbeI_id AND dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '00' THEN '23-0'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = 'F' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = 'F' AND dbo.View_3E_PRODUKTE_VARIANTEN_01.farbeA_id <> dbo.View_3E_PRODUKTE_VARIANTEN_01.farbeI_id dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '00' THEN '23-1'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = 'A' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = 'F' AND dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '00' THEN '23-2'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = 'F' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = '00' AND dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '06' THEN '33-0'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = '00' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = 'F' AND dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '06' THEN '33-1'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = 'F' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = 'F' AND dbo.View_3E_PRODUKTE_VARIANTEN_01.farbeA_id = dbo.View_3E_PRODUKTE_VARIANTEN_01.farbeI_id AND dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '00' THEN '43-0'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = 'F' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = 'F' AND dbo.View_3E_PRODUKTE_VARIANTEN_01.farbeA_id <> dbo.View_3E_PRODUKTE_VARIANTEN_01.farbeI_id dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '00' THEN '43-1'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = 'A' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = 'F' AND dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '06' THEN '43-2'
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = 'A' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = '00' dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '06' THEN '44-0' END
+ '-' + dbo.WDF_OBERFLAECHEN.OberflaechePG + '-' + WDF_OBERFLAECHEN_1.OberflaechePG + '-' + dbo.WDF_DICHTUNGSFRAGMENTE.DichtungsfragmentCode3E

Würde mich wieder über einen Tip freuen..


VG
CharlyOli
 
Werbung:
Was bedeutet denn "zu lang"?

Es ist immer gut, konkrete Fehlermeldungen mit anzugeben (Und wie immer, bitte keine Screenshots).

Zu viel Text oder zu viel Bedingungen?

Abhilfe zu große Textlänge:
Verwendung von Tabellen Aliasen

statt
Code:
CASE
WHEN WDF_OBERFLAECHEN.OberflaecheArtCode = '00' AND WDF_OBERFLAECHEN_1.OberflaecheArtCode = '00' AND dbo.WDF_GRUNDKOERPER.grundkoerper_familie = '00' THEN '00-0'

Code:
CASE
WHEN wo.OberflaecheArtCode = '00' AND wo1.OberflaecheArtCode = '00' AND wg.grundkoerper_familie = '00'
THEN '00-0'

entsprechend im from
Code:
from
  WDF_OBERFLAECHEN wo join ..
  WDF_OBERFLAECHEN wo1 join ..
  WDF_GRUNDKOERPER wg join ..

Die Angabe von dbo kannst Du vermutlich immer weglassen, außer es gibt tatsächlich mal einen doppeldeutigen Zugriff zu einer anderen DB. Würde aber dann auch im Join reichen mit Alias Ersatz.

Diese Case Statements in epischem Ausmaß sind evtl. ein Zeichen eines nicht (mehr) passenden Modells.
Ich hab es nicht im Einzeln durchgesehen, aber man kann diesen Eiertanz wahrscheinlich auch mit einer Hilfstabelle und einem passenden Mapping hinbekommen.
 
Moin,

Was bedeutet denn "zu lang"?

Hier war gemeint, dass man das zuvor in einem Texteditor vorbereitete Statement nicht mehr in die View einfügen konnte / kann, weil anscheinend zu viele Zeichen verwendet wurden.
Es wird einfach nicht kopiert. Verkürzt man es von der Textlänge geht es wieder.
Danke schon mal für deinen Tip
 
Diese Case Statements in epischem Ausmaß sind evtl. ein Zeichen eines nicht (mehr) passenden Modells.
Ich hab es nicht im Einzeln durchgesehen, aber man kann diesen Eiertanz wahrscheinlich auch mit einer Hilfstabelle und einem passenden Mapping hinbekommen.
Ist leider während des Projekts so entstanden. Durch eine größere Änderung ist es jetzt eben länger geworden. Jetzt suche ich eben nach einer Lösung..
 
Ist leider während des Projekts so entstanden
Ja, so ist das. Hindert einen ja niemand, das Beste draus zu machen (außer man selbst vielleicht).

einer Limitierung des verwendeten Clients.
Sehr gut möglich, aber @CharlyOli verät auch diesen nicht.

Nur falls es Dir nicht bekannt ist: Du kannst mit einem beliebigen Client, der eine Verbindung zu Deinem Server hinbekommt, diesen View anlegen. Einen Versuch ist es wert. Falls es das auch scheitert, würdest Du immerhin wohl eine echte Fehlermeldung erhalten.
 
Werbung:
Zurück
Oben