Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Wert aus einer anderen Spalte verwenden wenn Bedingung erfüllt

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Marv82, 2 Februar 2015.

  1. Marv82

    Marv82 Neuer Benutzer

    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
     
  2. Distrilec

    Distrilec Datenbank-Guru

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

    Wenn du auch noch wissen willst wie, guck dir mal Subselects an... :p
     
    Zuletzt bearbeitet: 2 Februar 2015
  3. ukulele

    ukulele Datenbank-Guru

    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]
     
  4. Marv82

    Marv82 Neuer Benutzer

    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
    
     
  5. Distrilec

    Distrilec Datenbank-Guru

    @ukulele Stimmt... Ist sogar besser als subselect...

    @Marv82
    Code:
    Select Distinct
    SLPositionFert_Parent_SID,
    'ANZAHL' = CASE
    Wenn das keinen Fehler gibt, bin ich beeindruckt ^^
     
  6. Marv82

    Marv82 Neuer Benutzer

    Nun, es kommt kein Fehler... wenn ich eine Dummynummer für XXXX eingebe bekomme ich eine Ergbnis.
     
  7. Marv82

    Marv82 Neuer Benutzer

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden