sql - How to only stuff values from a unique key -
i believe simple question equally simple answer, cannot figure out.
i have temporary table modeled , query returns data so:
+--------+------+---------+---------+--------+-----------+--------+-----+ | acct # | po # | store # | order # | line # | ship date | item # | qty | +--------+------+---------+---------+--------+-----------+--------+-----+ | 0777 | 3340 | 648 | 1756013 | 1 | 11/23/16 | 100598 | 1 | | 0777 | 3340 | 648 | 1756013 | 2 | 11/23/16 | 100597 | 1 | | 0777 | 3340 | 648 | 1756013 | 3 | 11/23/16 | 100598 | 1 | | 0777 | 3340 | 648 | 1756013 | 4 | 11/23/16 | 100596 | 1 | | 0777 | 3341 | 720 | 1760001 | 1 | 12/01/16 | 150962 | 1 | | 0777 | 3341 | 720 | 1760001 | 3 | 12/01/16 | 100596 | 1 | | 0777 | 3341 | 720 | 1760001 | 4 | 12/01/16 | 150961 | 1 | | 0777 | 3341 | 720 | 1760001 | 7 | 12/01/16 | 150961 | 1 | | 0777 | 3341 | 720 | 1760001 | 8 | 12/01/16 | 156961 | 1 | +--------+------+---------+---------+--------+-----------+--------+-----+ i supposed consolidating like-rows qty increases 1 2, etc., each item number same on order number. have part working in order had rid of line number, data returned looks this:
+--------+------+---------+---------+-----------+--------+-----+ | acct # | po # | store # | order # | ship date | item # | qty | +--------+------+---------+---------+-----------+--------+-----+ | 0777 | 3340 | 648 | 1756013 | 11/23/16 | 100598 | 2 | | 0777 | 3340 | 648 | 1756013 | 11/23/16 | 100597 | 1 | | 0777 | 3340 | 648 | 1756013 | 11/23/16 | 100596 | 1 | | 0777 | 3341 | 720 | 1760001 | 12/01/16 | 150962 | 1 | | 0777 | 3341 | 720 | 1760001 | 12/01/16 | 100596 | 1 | | 0777 | 3341 | 720 | 1760001 | 12/01/16 | 150961 | 3 | +--------+------+---------+---------+-----------+--------+-----+ however, need line # column accurately report on order-line being worked on, shipped, etc. know stuff() function can except adding every single line # , not ones specific order #. here query:
select distinct supplieracctnumber 'acct #', buyerponumber 'po #', buyerstorenumber 'store #', supplierordernumber 'order #', supplierorderline = stuff((select ',' + cast(t.supplierorderline varchar) @temp t t.supplierordernumber = supplierordernumber , t.buyeritemnumber = buyeritemnumber xml path ('')),1,1,''), suppliershipdate 'ship date', buyeritemnumber 'item #', sum(supplierqtyordered) 'qty' @temp group supplieracctnumber, buyerponumber, buyerstorenumber, supplierordernumber, supplierorderline, suppliershipdate, buyeritemnumber order supplierordernumber and here results got:
+--------+------+---------+---------+-------------------+-----------+--------+-----+ | acct # | po # | store # | order # | line # | ship date | item # | qty | +--------+------+---------+---------+-------------------+-----------+--------+-----+ | 0777 | 3340 | 648 | 1756013 | 1,2,3,4,1,3,4,7,8 | 11/23/16 | 100598 | 2 | | 0777 | 3340 | 648 | 1756013 | 1,2,3,4,1,3,4,7,8 | 11/23/16 | 100597 | 1 | | 0777 | 3340 | 648 | 1756013 | 1,2,3,4,1,3,4,7,8 | 11/23/16 | 100596 | 1 | | 0777 | 3341 | 720 | 1760001 | 1,2,3,4,1,3,4,7,8 | 12/01/16 | 150962 | 1 | | 0777 | 3341 | 720 | 1760001 | 1,2,3,4,1,3,4,7,8 | 12/01/16 | 100596 | 1 | | 0777 | 3341 | 720 | 1760001 | 1,2,3,4,1,3,4,7,8 | 12/01/16 | 150961 | 3 | +--------+------+---------+---------+-------------------+-----------+--------+-----+ here results expected:
+--------+------+---------+---------+-------------------+-----------+--------+-----+ | acct # | po # | store # | order # | line # | ship date | item # | qty | +--------+------+---------+---------+-------------------+-----------+--------+-----+ | 0777 | 3340 | 648 | 1756013 | 1,3 | 11/23/16 | 100598 | 2 | | 0777 | 3340 | 648 | 1756013 | 2 | 11/23/16 | 100597 | 1 | | 0777 | 3340 | 648 | 1756013 | 4 | 11/23/16 | 100596 | 1 | | 0777 | 3341 | 720 | 1760001 | 1 | 12/01/16 | 150962 | 1 | | 0777 | 3341 | 720 | 1760001 | 3 | 12/01/16 | 100596 | 1 | | 0777 | 3341 | 720 | 1760001 | 4,7,8 | 12/01/16 | 150961 | 3 | +--------+------+---------+---------+-------------------+-----------+--------+-----+
the issue, mentioned in comments, simple mixup how stuff written. adjusted, query should looke this, table alias @temp outside stuff statement:
select distinct supplieracctnumber 'acct #', buyerponumber 'po #', buyerstorenumber 'store #', supplierordernumber 'order #', supplierorderline = stuff((select ',' + cast(t.supplierorderline varchar) @temp t.supplierordernumber = supplierordernumber , t.buyeritemnumber = buyeritemnumber xml path ('')),1,1,''), suppliershipdate 'ship date', buyeritemnumber 'item #', sum(supplierqtyordered) 'qty' @temp t group supplieracctnumber, buyerponumber, buyerstorenumber, supplierordernumber, supplierorderline, suppliershipdate, buyeritemnumber order supplierordernumber;
Comments
Post a Comment