Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MSSQL]Problem z zapytaniem select
gangi
post 29.06.2012, 14:33:01
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 29.06.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
tolomei
post 29.06.2012, 14:57:41
Post #2





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

Ostrzeżenie: (0%)
-----


Może spróbuj z BETWEEN ?


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
gangi
post 29.06.2012, 17:07:22
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 29.06.2012

Ostrzeżenie: (0%)
-----


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ł ?
Go to the top of the page
+Quote Post
tolomei
post 29.06.2012, 17:52:40
Post #4





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował tolomei 29.06.2012, 17:54:14


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
gangi
post 29.06.2012, 18:08:25
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 29.06.2012

Ostrzeżenie: (0%)
-----


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'

Ten post edytował gangi 29.06.2012, 19:32:39
Go to the top of the page
+Quote Post
netmare
post 19.02.2013, 21:13:24
Post #6





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
tolomei
post 19.02.2013, 21:41:35
Post #7





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

Ostrzeżenie: (0%)
-----


Temat z przed ponad pół roku biggrin.gif
Przyznaj się nudziło Ci się tongue.gif


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 13:51