sql server - SQL sum values of duplicate rows into the first one (or last one) -


i want merge duplicated rows (with same doctype, docnum , item) , sum value of 'qtd' column first 1 or last one. delete duplicate rows keeping 1 caries total value. (the line number not important after deleting can allow not sequential numbers)

actually have query detect duplicated rows, need query merge value , delete duplicated rows remain after merge.

ps: big table doctype, docnum , item cannot expressed in query this... doctype='stket' , docum='1' , item='4506' must found "automatically"

table: docs (initial duplicated rows)

      doctype  docnum  line    item      qtd        stket     1       1   **4506**   10.00        stket     1       2     3860     27.00        stket     1       3   **4506**    4.00        stket     2       1     3860      7.00        stket     3       1   **4048**    2.00        stket     3       2   **4048**    5.00        stket     3       3     4876     11.00        stket     4       1     3860      1.00 

table: docs (expected result after sum)

      doctype  docnum  line    item      qtd        stket     1       1     4506   **14.00**        stket     1       2     3860     27.00        stket     1       3     4506      4.00        stket     2       1     3860      7.00        stket     3       1     4048    **7.00**        stket     3       2     4048      5.00        stket     3       3     4876     11.00        stket     4       1     3860      1.00 

table: docs (expected result after deleting duplicated - in case not first!)

      doctype  docnum  line    item      qtd        stket     1       1     4506   **14.00**        stket     1       2     3860     27.00        stket     2       1     3860      7.00        stket     3       1     4048    **7.00**        stket     3       3     4876     11.00        stket     4       1     3860      1.00 

[later edit] - "answer"

after zlk query keep table docs this:

  doctype  docnum  line    item      qtd    stket     1       1     4506   **10.00**    stket     1       2     3860     27.00    stket     2       1     3860      7.00    stket     3       1     4048    **2.00**    stket     3       3     4876     11.00    stket     4       1     3860      1.00 

it finds duplicates , deletes doesn't sum 'qtd' value of deleted rows

so i'm assuming want basic update statement delete statement.

update docs set qtd = updateqtd docs d join (select doctype, docnum, item, min(line) line, sum(qtd) updateqtd docs group doctype, docnum, item) on a.doctype = d.doctype , a.docnum = d.docnum , a.item = d.item , a.line = d.line;  cte (     select *, row_number() on (partition doctype, docnum, item order line) rn     docs) delete cte rn <> 1 

this updates lowest line number deletes aren't lowest line number.


Comments

Popular posts from this blog

sql - VB.NET Operand type clash: date is incompatible with int error -

SVG stroke-linecap doesn't work for circles in Firefox? -

python - TypeError: Scalar value for argument 'color' is not numeric in openCV -