Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MSSQL]Problem z zapytaniem select
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
gangi
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 ?

  1. SELECT
  2. SUM(TrN_NettoR) AS [Wartośc sprzedaży]
  3. FROM
  4. CDN.TraNag
  5. INNER JOIN CDN.KntKarty ON Knt_GIDNumer=TrN_KntNumer
  6. WHERE
  7. TRN_DATA2>= DATEDIFF (DD,'18001228', '20120501' )AND
  8. TRN_DATA2<= DATEDIFF (DD,'18001228', '20120531' )AND
  9.  
  10. CASE
  11. WHEN TrN_GIDTyp IN (2033, 2037, 2041, 2045, 1824, 1828)
  12. TrN_SpiTyp != 0
  13. THEN TrN_SpiTyp != 0
  14. WHEN TrN_GIDTyp IN (2034, 2042)
  15. THEN TrN_SpiTyp = 0
  16. END
tolomei
Może spróbuj z BETWEEN ?
gangi
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
To zapewne coś takiego:

  1. SELECT SUM(TrN_NettoR) AS [Wartośc sprzedaży]
  2. FROM CDN.TraNag
  3. INNER JOIN CDN.KntKarty ON Knt_GIDNumer=TrN_KntNumer
  4. WHERE TRN_DATA2>= DATEDIFF (DD,'18001228', '20120501' )
  5. AND TRN_DATA2<= DATEDIFF (DD,'18001228', '20120531' )
  6. AND (
  7. TrN_GIDTyp IN (2033, 2037, 2041, 2045, 1824, 1828)
  8. AND
  9. TrN_SpiTyp = 0
  10. ) OR (
  11. TrN_GIDTyp IN (2034, 2042)
  12. AND
  13. TrN_SpiTyp <> 0
  14. )


Pozdrawiam.
gangi
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
  1. (
  2. (
  3. TrN_GIDTyp IN (2033,2037,2041,2045,1824,1828)
  4. AND
  5. TrN_SpiTyp <> 0)
  6. )
  7. OR
  8. (
  9. TrN_GIDTyp IN (2034,2042)
  10. AND
  11. TrN_SpiTyp = 0
  12. )
  13. )
  14. AND
  15. TRN_DATA2>= DATEDIFF (DD,'18001228', '20120501' )
  16. AND
  17. TRN_DATA2<= DATEDIFF (DD,'18001228', '20120531' )
  18. AND
  19. Knt_Akronim <> 'ABC'


questionmark.gif
tolomei
Temat z przed ponad pół roku biggrin.gif
Przyznaj się nudziło Ci się tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.