Wyliczenie wartości z tabeli

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ł??

0
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 
0

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

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ą.

0
BlackBad napisał(a):
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.

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.

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 
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.

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

1

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

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 

1 użytkowników online, w tym zalogowanych: 0, gości: 1