gangi
29.06.2012, 14:33:01
Mam problem z zapytaniem. Chcę żeby w zależności od tego czy wartość danej kolumny jest w zadanym przedziale był brany pod uwagę wybrany wiersz lub nie. Próbowałem użyć CASE ale nie działa mi to zapytanie. Możecie pomóc ?
SELECT
SUM(TrN_NettoR) AS [Wartośc sprzedaży]
FROM
CDN.TraNag
INNER JOIN CDN.KntKarty ON Knt_GIDNumer=TrN_KntNumer
WHERE
TRN_DATA2>= DATEDIFF (DD,'18001228', '20120501' )AND
TRN_DATA2<= DATEDIFF (DD,'18001228', '20120531' )AND
CASE
WHEN TrN_GIDTyp IN (2033, 2037, 2041, 2045, 1824, 1828)
TrN_SpiTyp != 0
THEN TrN_SpiTyp != 0
WHEN TrN_GIDTyp IN (2034, 2042)
THEN TrN_SpiTyp = 0
END
gangi
29.06.2012, 17:07:22
Dokładnie to mam taką sytuację:

Chcę zsumować tylko takie wiersze w których kolumna TrN_GIDTyp ma którąś z wartości (2033, 2037, 2041, 2045, 1824, 1828) i jednocześnie kolumna TrN_SpiTyp jest równa zero. Dodatkowo kolumna TrN_GIDTyp ma którąś z wartości (2034, 2042) i jednocześnie kolumna TrN_SpiTyp jest różna od zera.
Jakiś pomysł ?
tolomei
29.06.2012, 17:52:40
To zapewne coś takiego:
SELECT SUM(TrN_NettoR) AS [Wartośc sprzedaży]
FROM CDN.TraNag
INNER JOIN CDN.KntKarty ON Knt_GIDNumer=TrN_KntNumer
WHERE TRN_DATA2>= DATEDIFF (DD,'18001228', '20120501' )
AND TRN_DATA2<= DATEDIFF (DD,'18001228', '20120531' )
AND (
TrN_GIDTyp IN (2033, 2037, 2041, 2045, 1824, 1828)
AND
TrN_SpiTyp = 0
) OR (
TrN_GIDTyp IN (2034, 2042)
AND
TrN_SpiTyp <> 0
)
Pozdrawiam.
gangi
29.06.2012, 18:08:25
Dzięki. Poprawiłem zapytanie i je trochę rozbudowałem. Teraz wygląda tak:
WHERE
(TrN_GIDTyp IN (2033,2037,2041,2045,1824,1828) AND
TrN_SpiTyp <> 0 AND
TRN_DATA2>= DATEDIFF (DD,'18001228', '20120501' )AND
TRN_DATA2<= DATEDIFF (DD,'18001228', '20120531' )AND
Knt_Akronim <> 'ABC')
OR
(TrN_GIDTyp IN (2034,2042) AND
TrN_SpiTyp = 0 AND
TRN_DATA2>= DATEDIFF (DD,'18001228', '20120501' )AND
TRN_DATA2<= DATEDIFF (DD,'18001228', '20120531' )AND
Knt_Akronim <> 'ABC')
Czy można je jakoś przerobić żeby nie trzeba było powielać tych warunków ?
TRN_DATA2>= DATEDIFF (DD,'18001228', '20120501' )AND
TRN_DATA2<= DATEDIFF (DD,'18001228', '20120531' )AND
Knt_Akronim <> 'ABC'
netmare
19.02.2013, 21:13:24
(
(
TrN_GIDTyp IN (2033,2037,2041,2045,1824,1828)
AND
TrN_SpiTyp <> 0)
)
OR
(
TrN_GIDTyp IN (2034,2042)
AND
TrN_SpiTyp = 0
)
)
AND
TRN_DATA2>= DATEDIFF (DD,'18001228', '20120501' )
AND
TRN_DATA2<= DATEDIFF (DD,'18001228', '20120531' )
AND
Knt_Akronim <> 'ABC'
tolomei
19.02.2013, 21:41:35
Temat z przed ponad pół roku

Przyznaj się nudziło Ci się