Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL]SQL dodawanie i odejmowanie w jednej kolumnie
magier123
post
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.03.2007

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


Witam
Dawno mnie tu nie bylo i od razu wracam z problemem. (IMG:style_emoticons/default/smile.gif)

Mam baze w ktorej są faktury vat i potrzebuje wyliczyć wartość tych faktur za zadany okres. O ile okres, klient, i sumowanie to nie problem to korekty juz nie wiem jak zrobic.
W tabeli, wiersz ma faktury ma wartosc i oznaczenie K jesli jest to korekta. Wartosc faktur jest zawsze na plus ( jezeli jest korekta to tylko jest oznaczone jako K ale nie ma ujemnej wartosc). Chciałbym to "załatwić" w jednym zapytaniu.

Teraz napisze glupote ale moze troche pokaze jak to widze

SELECT SUM(SUMA) - (SUM(SUMA) WHERE PAYDEAL = 'K') as SUMA2 ..........

Mam nadzieje ze logiczne
Go to the top of the page
+Quote Post
tomxx
post
Post #2





Grupa: Zarejestrowani
Postów: 172
Pomógł: 27
Dołączył: 5.10.2013

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


Pokaż strukturę tej tabeli.
Go to the top of the page
+Quote Post
magier123
post
Post #3





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.03.2007

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


Hmmm , teraz bedzie mały problem bo moge sie do niej tylko z jednego IP dostac (z pracy). Chyba troche zle napisalem... wszystko jest w obrebie jednej tabeli.

W tabeli są takie kolumny (ktore będą potrzebne do zapytania)

NUMER KLIENTA, WARTOSC FAKTURY, RODZAJ (korekta lub nie)



NUMER KLIENTA | WARTOŚĆ | RODZAJ
----------------------------------------------
1211.................|.1..............|.... K
----------------------------------------------
1211.................|.2..............|.....P7
----------------------------------------------
1211.................|.2..............|....P14

Według tego wartość na kliencie powinna byc 3. (Dwie FV na plus i jedna korekta)

Ten post edytował magier123 30.01.2014, 19:19:46
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




IF

select SUM(IF(RODZAJ<>'K',WARTOSC,-WARTOSC)) as suma .....
Go to the top of the page
+Quote Post
magier123
post
Post #5





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.03.2007

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


Jakis byk? Bo nie dziala


"SELECT SUM(IF(PAYDEAL<>'K',SUM1,-SUM1)) as suma FROM IVVc WHERE INVDATE between '2014-01-01' and '2014-01-30' AND CUSTCODE='13232'"
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Mi dziala.... i co, mamy sie tak licytowac?

Napisz czym sie objawia niedzialanie,czy sa zle wyniki, czy ich nie ma wcale.
Jak nie ma wcale znaczy ze blad bazy, Wiec wyswietl blad bazy
Go to the top of the page
+Quote Post
magier123
post
Post #7





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.03.2007

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


Fatal error: Call to a member function execute() on a non-object in C:\xampp\htdocs\intranet.php on line 22

  1. 21. $result = $dbh->query("SELECT SUM(IF(PAYDEAL<>'K', SUM1, -SUM1)) as suma FROM IVVc WHERE INVDATE between '2014-01-01' and '2014-01-30' AND CUSTCODE='13232'");
  2. 22. $result->execute();
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zakladam ze uzywasz PDO... od kiedy po QUERY robi sie EXECUTE?
Go to the top of the page
+Quote Post
magier123
post
Post #9





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.03.2007

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


  1. $result = $dbh->prepare("SELECT SUM(IF(PAYDEAL<>'K', SUM1, -SUM1)) as suma, FROM IVVc WHERE INVDATE between '2014-01-01' and '2014-01-30' AND CUSTCODE='13232'");
  2.  
  3. $result->execute();
  4. $items = $result->fetchAll();
  5.  
  6.  
  7.  
  8. echo "<pre>";
  9. print_r($items);
  10. echo "</pre>";


Fakt... chyba za duzo juz dzisiaj... ale teraz wynik to pusta tablica... znowu jakis prosty blad?
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




widac nie ma zadnych rekordow spelniajacych twoje warunki:
INVDATE between '2014-01-01' and '2014-01-30' AND CUSTCODE='13232'
Go to the top of the page
+Quote Post
magier123
post
Post #11





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.03.2007

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


Chyba jednak nie o to chodzi. Sprawdzalem na 4 klientach na ktorych sa korekty w tym czasie i na wszystkich jest ten sam wynik
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




piszesz ze jest pusta tablica. Czyli co, twoj print_r zwraca na ekranie tekst: Array() czy nic nie zwraca? zadnego tekstu?
Go to the top of the page
+Quote Post
magier123
post
Post #13





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.03.2007

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


Array
(
)

Jezeli wszystko byloby ok to nie powinno byc?
Array
(
[SUM] =>
)
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Poprostu wywal caly blok WHERE.
Go to the top of the page
+Quote Post
magier123
post
Post #15





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.03.2007

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


Ten sam efekt.
Jezeli zrobie tak

  1. $result = $dbh->query("SELECT SUM(SUM1) as suma FROM IVVc WHERE INVDATE between '2014-01-01' and '2014-01-30' AND CUSTCODE='13232' AND PAYDEAL='K'");


To tablica jest taka

Array
(
[0] => Array
(
[suma] => 392.61
[0] => 392.61
)

)
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to masz blad zapytania. Wyswietl go sobie, Pisalem ci juz o tym wczesniej.

suma, FROM

Ten przecinek jest totalnie ZBEDNY
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 23:05