Wert aus einer anderen Spalte verwenden wenn Bedingung erfüllt

Marv82

Neuer Benutzer
Beiträge
4
Hallo,

ich habe DB Einträge wie folgt:

SID / PARENT_SID / ANZAHL / ImVorrat / Freigabe
1 / Null / 5 / 1 / 1
2 / Null / 70 / 1 / 0
3 / 2 / 1 / 1 / 1

Ich möchte die ANZAHL aller Poisitionen mit ImVorrat und Freigabe = 1. Wenn eine PARENT_SID vorhanden ist soll die ANZAHL von der Position mit SID = PARENT_SID genommen werden.

Ist das in einer Abfrage machbar?

Mfg

Marv
 
Werbung:
Um deine Frage zu beantworten: Ja, das ist machbar :)

Wenn du auch noch wissen willst wie, guck dir mal Subselects an... :p
 
Zuletzt bearbeitet:
In etwa so würde ich es machen (kein Subselect wie Distrilec ihn im Sinn hatte):
Code:
SELECT    tabelle.[SID],
        tabelle.PARENT_SID,
        (    CASE
            WHEN    tabelle.PARENT_SID IS NOT NULL
            THEN    t.ANZAHL
            ELSE    tabelle.ANZAHL,
            END ) AS anzahl
FROM    tabelle
LEFT JOIN tabelle t
ON        tabelle.PARENT_SID = t.[SID]
WHERE    tabelle.ImVorrat = 1
AND        tabelle.Freigabe = 1
Code:
SELECT    tabelle.[SID],
        sum(    CASE
                WHEN    tabelle.PARENT_SID IS NOT NULL
                THEN    t.ANZAHL
                ELSE    tabelle.ANZAHL,
                END )) AS anzahl
FROM    tabelle
LEFT JOIN tabelle t
ON        tabelle.PARENT_SID = t.[SID]
WHERE    tabelle.ImVorrat = 1
AND        tabelle.Freigabe = 1
GROUP BY tabelle.[SID]
 
Hi,

wenn ich jetzt noch wüßte, wie ich den Wert von SLPositionFert_Parent_SID an die Stelle des Platzhalters XXXX bekomme dürfte es passen. Wie kann ich das übergeben? Da die Abfrage erkennt, dass der Wert nicht Null ist muss der Wert ja zumindest temporär vorhanden sein und müsste auch übgergeben werden können?

Code:
Select Distinct
SLPositionFert_Parent_SID,
'ANZAHL' = CASE When SLPositionFert_Parent_SID is null
then Anzahl
Else
(Select Distinct Anzahl from dbo.SLPosition where Dbo.SLPosition.SLPositionFert_Parent_SID = XXXX)
END
FROM
(SELECT
dbo.SLPosition.Anzahl, Dbo.SLPosition.SLPositionFert_Parent_SID
FROM
dbo.SLPosition,
dbo.Auftrag,
dbo.Werkstattauftrag
Where
dbo.SLPosition.Auftrag_SID = dbo.Auftrag.Auftrag_SID
and
dbo.SLPosition.SLPositionFert_SID = dbo.Werkstattauftrag.SLPositionFert_SID
and dbo.SLPosition.FreigabeAnAV = '1'
AND
dbo.SLPosition.Zeichnung_Nr is not Null
and
dbo.Werkstattauftrag.TermineGrob_Fixiert = '0'
and
dbo.Werkstattauftrag.IstImVorrat = '1'
)
as t1
 
Werbung:
So geht es jetzt

Code:
Select Distinct
t1.[SLPositionFert_SID], t1.SLPositionFert_Parent_SID,
'ANZAHL' = CASE When t1.SLPositionFert_Parent_SID is null
then t1.Anzahl
Else
t.Anzahl
END
FROM
(SELECT
dbo.SLPosition.[SLPositionFert_SID], Dbo.SLPosition.Anzahl, Dbo.SLPosition.SLPositionFert_Parent_SID
FROM
dbo.SLPosition,
dbo.Auftrag,
dbo.Werkstattauftrag
Where
dbo.SLPosition.Auftrag_SID = dbo.Auftrag.Auftrag_SID
and
dbo.SLPosition.SLPositionFert_SID = dbo.Werkstattauftrag.SLPositionFert_SID
and
dbo.SLPosition.FreigabeAnAV = '1'
and
dbo.SLPosition.Zeichnung_Nr is not Null
and
dbo.Werkstattauftrag.TermineGrob_Fixiert = '0'
and
dbo.Werkstattauftrag.IstImVorrat = '1'
) as t1
Left Join dbo.SLPosition t
on t1.SLPositionFert_Parent_SID = t.[SLPositionFert_SID]

Vielen Dank für eure Hilfe :)

Mfg Marv
 
Zurück
Oben