Łukasz M.

Łukasz M. informatyk

Temat: Problem z zapytaniem select

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

konto usunięte

Temat: Problem z zapytaniem select

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


co to ma robić? TrN_SpiTyp != 0 bo nie kumam intencji

poza tym case musisz porównać do jakiejś wartości w tym miejscu
Łukasz M.

Łukasz M. informatyk

Temat: Problem z zapytaniem select

Mam taką sytuację


Obrazek


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ł ?
Łukasz K.

Łukasz K. programista
ASP.NET/JS/T-SQL,
2KMM Sp z o.o.

Temat: Problem z zapytaniem select

Nie testowałem, ale powinno zadziałać coś w tym stylu
SELECT * FROM TraNag
WHERE (TrN_GIDTyp IN (2033,2037,2041,2045,1824,1828) AND TrN_SpiTyp = 0) OR (TrN_GIDTyp IN (2034,2042) AND TrN_SpiTyp <> 0)Łukasz K. edytował(a) ten post dnia 29.06.12 o godzinie 18:43
Łukasz M.

Łukasz M. informatyk

Temat: Problem z zapytaniem select

Dzięki. Generalnie zapytanie działa ale wyświetla błędną wartość.
Jak rozbije je na dwa zapytania:
1)
SELECT * FROM TraNag
WHERE (TrN_GIDTyp IN (2033,2037,2041,2045,1824,1828) AND TrN_SpiTyp = 0)
2)
SELECT * FROM TraNag
WHERE (TrN_GIDTyp IN (2034,2042) AND TrN_SpiTyp <> 0)

To po zsumowaniu otrzymuję inny wynik niż jak jest w całości.
Wcześniej próbowałem już coś podobnego ale przez zły wynik zacząłem kombinować.
Nie wiem czemu te wyniki mogą się różnić ?

konto usunięte

Temat: Problem z zapytaniem select

Łukasz M.:
Dzięki. Generalnie zapytanie działa ale wyświetla błędną wartość.
Jak rozbije je na dwa zapytania:
1)
SELECT * FROM TraNag
WHERE (TrN_GIDTyp IN (2033,2037,2041,2045,1824,1828) AND TrN_SpiTyp = 0)
2)
SELECT * FROM TraNag
WHERE (TrN_GIDTyp IN (2034,2042) AND TrN_SpiTyp <> 0)

To po zsumowaniu otrzymuję inny wynik niż jak jest w całości.
Wcześniej próbowałem już coś podobnego ale przez zły wynik zacząłem kombinować.
Nie wiem czemu te wyniki mogą się różnić ?


a, co z tego CDN XL, chcesz wyciągnąć - tylko te dane jak w tabelce?;)

Mateusz H. edytował(a) ten post dnia 29.06.12 o godzinie 20:15
Łukasz M.

Łukasz M. informatyk

Temat: Problem z zapytaniem select

Moje zapytanie było bardziej rozbudowane i przez to nie uwzględniało wszystkich warunków (stąd inne wartości).

Dzięki za pomoc.
Jarosław Kędzierski

Jarosław Kędzierski Admin od okienek

Temat: Problem z zapytaniem select

Jeśli dobrze zrozumiałem to na szybciora można by sprówać coś w stylu...

Select SUM(TrN_NettoR), TrN_SpiTyp from
(
SELECT TrN_NettoR,
CASE
WHEN TrN_GIDTyp IN (2033, 2037, 2041, 2045, 1824, 1828) andTrN_SpiTyp != 0 THEN 1
WHEN TrN_GIDTyp IN (2034, 2042) THEN 0
END as TrN_SpiTyp
FROM
TraNag) a
group by TrN_SpiTyp;

Oczywiście zapytanie musiałem uporościć, bo podałeś tylko jedną tabelkę
Wojciech W.

Wojciech W. Kierownik IT /
Analityk IT

Temat: Problem z zapytaniem select

WITH cList (
SELECT * FROM TraNag WHERE TrN_GIDTyp IN (2033, 2037, 2041, 2045, 1824, 1828) AND TrN_SpiTyp =0
UNION ALL
SELECT * FROM TrN_GIDTyp IN (2034, 2042) and TrN_SpiTyp<>0
)
SELECT SUM(TrN_NettoR) AS [Suma]
FROM cLsit



Wyślij zaproszenie do