Wyliczenie wartości z tabeli

Wyliczenie wartości z tabeli
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0

Mamy taką tabelkę:

id_zamowienia kod_podatkowy wartość
1 z10 10
2 z20 20
3 z10 30
2 z10 20
1 z20 30
3 z20 40

Potrzeba otrzymać taki wynik (wartość z20 jest błędnie wpisana w pierwszej tabeli, powinna zostać pomniejszona o z10 dla danego id_zamówienia):

id_zamówienia kod_podatkowy wartość
1 z10 10
2 z20 0
3 z10 30
2 z10 20
1 z20 20
3 z20 10

ktoś jakiś pomysł??

BlackBad
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 454
0
Kopiuj
Update tabela1
SET wartosc = t1.wartosc - t2.wartosc
FROM Tabela1 t1

INNER JOIN

(SELECT id_zamowienia, wartosc
FROM Tabela2
WHERE kod_podatkowy = z10) t2

ON

t1.id_zamowienia = t2.id_zamowienia 
  • Rejestracja: dni
  • Ostatnio: dni
0

Tylko że wtedy nadpiszemy tabele a jeśli kolega chce tylko wynikową?

  • Rejestracja: dni
  • Ostatnio: dni
0
Wielki Karp napisał(a):

Tylko że wtedy nadpiszemy tabele a jeśli kolega chce tylko wynikową?

To nie są dwie tabele.Na podstawie pierwszej mamy otrzymać druga wynikową.

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0
BlackBad napisał(a):
Kopiuj
Update tabela1
SET wartosc = t1.wartosc - t2.wartosc
FROM Tabela1 t1

INNER JOIN

(SELECT id_zamowienia, wartosc
FROM Tabela2
WHERE kod_podatkowy = z10) t2

ON

t1.id_zamowienia = t2.id_zamowienia 

To nie są dwie osobne tabele. Pierwsza tabela jest tabelą w bazie, a druga wynikiem jaki chcemy otrzymać po zapytaniu, beż nadpisywania źródła.

BlackBad
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 454
0

No to tak, nie update a select ... i poprawilem sie bo faktycznie wczesniej zrobilem literowke i napisalem tablea2, a jak zauwazyliscie clay czas poruszamy sie po tej samej tabeli.

Kopiuj
Select t1.id_zamowienia,  t1.kod_podatkowy, (t1.wartosc - ISNULL(t2.wartosc, 0)) as wartosc_korekta
FROM Tabela1 t1
 
LEFT JOIN
 
(SELECT id_zamowienia, wartosc
FROM Tabela1
WHERE kod_podatkowy = z10) t2
 
ON
 
t1.id_zamowienia = t2.id_zamowienia 
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0
BlackBad napisał(a):

No to tak, nie update a select ... i poprawilem sie bo faktycznie wczesniej zrobilem literowke i napisalem tablea2, a jak zauwazyliscie clay czas poruszamy sie po tej samej tabeli.

Kopiuj
Select t1.id_zamowienia,  t1.kod_podatkowy, (t1.wartosc - ISNULL(t2.wartosc, 0)) as wartosc_korekta
FROM Tabela1 t1
 
LEFT JOIN
 
(SELECT id_zamowienia, wartosc
FROM Tabela1
WHERE kod_podatkowy = z10) t2
 
ON
 
t1.id_zamowienia = t2.id_zamowienia 

screenshot-20171122213834.png

BlackBad
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 454
1

Heh sorry urodziny mam .. takze sami rozumiecie nie do konca myślę sprawnie ;)

Kopiuj
SELECT t1.id_zamowienia,  t1.kod_podatkowy, 
CASE WHEN t1.kod_podatkowy = 'z10' THEN t1.wartosc ELSE (t1.wartosc - ISNULL(t2.wartosc, 0)) END AS wartosc_korekta
FROM Tabela1 t1
 
LEFT JOIN
 
(SELECT id_zamowienia, wartosc
FROM Tabela1
WHERE kod_podatkowy = z10) t2
 
ON
 
t1.id_zamowienia = t2.id_zamowienia 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.