SQL-Abfrage: Ergebnis in Abhängigkeit eines anderen Feldes verändern
SQL-Abfrage mit IIF, um Werte zu beeinflussen
Hallo!
Bin nicht allzu fit in MS SQL, aber brauche eine Lösung für folgendes Problem:
Ich habe einen SQL-Server, in dem ich im Query-Analyzer folgende Abfrage eingegeben habe:
SELECT KOSTKKA.KKa_Nr AS KA, KOSTKKA.KKa_Bez AS KABEZ, right(KOSTKKS.KKs_Nr,4) AS KST, KOSTKKS.KKs_Bez AS KSTBEZ, MONTH(KOSTKBU.KBu_BelDat)
AS Monat, YEAR(KOSTKBU.KBu_BelDat) AS Jahr, KOSTKBU.KBu_BelDat AS BelDat, KOSTKBU.KBu_Text AS BuchTXT,
KOSTKBU.KBu_Euro AS Betrag, KOSTKBU.KBU_Haben as Vorzeichen,
> hier beginnt das Problem
iif(KOSTKBU.KBU_Haben = "-1", (KOSTKBU.KBU_Euro * (-1)) , KOSTKBU.KBU_Euro) AS TEST
> und hier endet es.
FROM KOSTKBU INNER JOIN
KOSTKKS ON KOSTKBU.KKs_IdSoll = KOSTKKS.KKs_Id INNER JOIN
KOSTKKA ON KOSTKBU.KKa_IdSoll = KOSTKKA.KKa_Id
WHERE (KOSTKBU.KBu_MitarbV = 586)
Soweit alles gut, aber das Problem ist das iif......
Ich brauche den Wert von KBU_Euro, der je nachdem, welchen Wert KBU_Haben hat, entweder positiv oder negativ ist. KBU_Haben kann 0 oder -1 sein, d.h. wenn KBU_Haben 0 ist, dann soll KBU_Euro (150,00) z.B. -150,00 Euro sein. (*-1)
Ich weiß erstens schon nicht, ob so etwas innerhalb eines SELECT erlaubt ist und zweitens meckert der Analyzer die Syntax an:
Falsche Syntax in der Nähe von '='.
Habe schon ohne Anführungszeichen versucht, alles mögliche in Klammern usw. Komme einfach nicht drauf.
Daraus soll später ein DTS-Paket werden, dass die Werte automatisch in eine TXT-Datei konvertiert. Das funktioniert allerdings schon, jedoch ohne den iif-Teil.
Hat hier jemand eine Idee bzw. Hilfe? Danke im Voraus!
Andreas
Hallo!
Bin nicht allzu fit in MS SQL, aber brauche eine Lösung für folgendes Problem:
Ich habe einen SQL-Server, in dem ich im Query-Analyzer folgende Abfrage eingegeben habe:
SELECT KOSTKKA.KKa_Nr AS KA, KOSTKKA.KKa_Bez AS KABEZ, right(KOSTKKS.KKs_Nr,4) AS KST, KOSTKKS.KKs_Bez AS KSTBEZ, MONTH(KOSTKBU.KBu_BelDat)
AS Monat, YEAR(KOSTKBU.KBu_BelDat) AS Jahr, KOSTKBU.KBu_BelDat AS BelDat, KOSTKBU.KBu_Text AS BuchTXT,
KOSTKBU.KBu_Euro AS Betrag, KOSTKBU.KBU_Haben as Vorzeichen,
> hier beginnt das Problem
iif(KOSTKBU.KBU_Haben = "-1", (KOSTKBU.KBU_Euro * (-1)) , KOSTKBU.KBU_Euro) AS TEST
> und hier endet es.
FROM KOSTKBU INNER JOIN
KOSTKKS ON KOSTKBU.KKs_IdSoll = KOSTKKS.KKs_Id INNER JOIN
KOSTKKA ON KOSTKBU.KKa_IdSoll = KOSTKKA.KKa_Id
WHERE (KOSTKBU.KBu_MitarbV = 586)
Soweit alles gut, aber das Problem ist das iif......
Ich brauche den Wert von KBU_Euro, der je nachdem, welchen Wert KBU_Haben hat, entweder positiv oder negativ ist. KBU_Haben kann 0 oder -1 sein, d.h. wenn KBU_Haben 0 ist, dann soll KBU_Euro (150,00) z.B. -150,00 Euro sein. (*-1)
Ich weiß erstens schon nicht, ob so etwas innerhalb eines SELECT erlaubt ist und zweitens meckert der Analyzer die Syntax an:
Falsche Syntax in der Nähe von '='.
Habe schon ohne Anführungszeichen versucht, alles mögliche in Klammern usw. Komme einfach nicht drauf.
Daraus soll später ein DTS-Paket werden, dass die Werte automatisch in eine TXT-Datei konvertiert. Das funktioniert allerdings schon, jedoch ohne den iif-Teil.
Hat hier jemand eine Idee bzw. Hilfe? Danke im Voraus!
Andreas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 50786
Url: https://administrator.de/contentid/50786
Ausgedruckt am: 26.11.2024 um 10:11 Uhr
2 Kommentare
Neuester Kommentar
*lach*
@AndreasHoster
Deine Variante ist aber gefährlich genial... die musst Du ja schon als Autor dreimal lesen, um sie zu verstehen.
Und da die Hinterlegbarkeit von Kommentarzeilen in SQL-Statements auch unter 64-Bit-Systemen immer noch ein wenig zu wünschen übrig lässt, hat in drei Wochen niemand mehr den Mut, an diesem Statement etwas zu ändern ("...da fass ich nichts an.. ich weiss nicht so genau, was da passiert...") .... trotzdem ein klares *ThumpsUp* von mir ...
@andreasfischer
Wenn Du etwas weniger prickelnd implementieren willst:
Das Äquivalent zu der merkwürdigen IIF(..)-Anweisung im noch merkwürdigeren Access ist:
P.S. Die Klammern rund um das "Case...End" sind eher dekorativ/zur Lesbarkeit....aber nicht nötig.
Und das Feld KOSTKBU.KBU_Haben habe ich wie auch Andreas als Numerisch unterstellt, nicht als CHAR.
P.P.S. Wo habt ihr denn die Tabellen- und Feldnamen gekauft? Bei einer Tiroler Jodelschule?
Gruss
Biber
@AndreasHoster
Deine Variante ist aber gefährlich genial... die musst Du ja schon als Autor dreimal lesen, um sie zu verstehen.
Und da die Hinterlegbarkeit von Kommentarzeilen in SQL-Statements auch unter 64-Bit-Systemen immer noch ein wenig zu wünschen übrig lässt, hat in drei Wochen niemand mehr den Mut, an diesem Statement etwas zu ändern ("...da fass ich nichts an.. ich weiss nicht so genau, was da passiert...") .... trotzdem ein klares *ThumpsUp* von mir ...
@andreasfischer
Wenn Du etwas weniger prickelnd implementieren willst:
Das Äquivalent zu der merkwürdigen IIF(..)-Anweisung im noch merkwürdigeren Access ist:
....
Case
When <bedingung> Then 'bla'
Else 'blubb'
End
...
--oder in einem Fall:
....
feldx,
(
Case
When KOSTKBU.KBU_Haben = -1 then KOSTKBU.KBU_Euro * (-1)
Else KOSTKBU.KBU_Euro
End
) As test,
feldy,
.....
P.S. Die Klammern rund um das "Case...End" sind eher dekorativ/zur Lesbarkeit....aber nicht nötig.
Und das Feld KOSTKBU.KBU_Haben habe ich wie auch Andreas als Numerisch unterstellt, nicht als CHAR.
P.P.S. Wo habt ihr denn die Tabellen- und Feldnamen gekauft? Bei einer Tiroler Jodelschule?
Gruss
Biber