group by op een veld maar meer velden tonen

Status
Niet open voor verdere reacties.

manueld

Gebruiker
Lid geworden
12 feb 2012
Berichten
216
ik wil graag vanuit een tabel data kopieren naar een nieuwe tabel. in deze table staan al records. hij moet niet bestaande records toevoegen als in de bron tabel het veld "tcusCustomerPo" niet leeg is. dit lukt met onderstaande code. hij moet echter alleen unieke records(lees tcusCustomerPo moet uniek zijn) ik probeer dat met group by maar omdat de andere velden verschillende waarden bevatten maakt hij toch dubbele. wat ik wil is dat hij dus group by doet op slechts 1 veld maar toch alle gewenste velden toont. zodra ik een group by doe op 1 veld dan geeft hij een foutmelding
Msg 8120, Level 16, State 1, Line 9
Column 'lmd_process_control.dbo.tmptblSopReport.PRICE TERM' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
ik snap deze foutmelding maar hoe kan ik toch een groupby doen op 1 veld en toch meerdere velden tonen


Code:
   insert into ##Pocustemp ([tcusCustomerPo]
      ,[tcusPriceTerm]
      ,[tcusPaymenntTerm]
      ,[tcusOrderType]
      ,[tcusShipWay]
      ,[tcusCount]
      )select 
      [CUSTOMER PO]
      ,[PRICE TERM]
      ,[PAYMENNT TERM]
      ,[ORDER TYPE]
      ,[SHIP WAY]
      , COUNT([CUSTOMER PO])
FROM
    [lmd_process_control].[dbo].[tmptblSopReport]
GROUP BY      
      [CUSTOMER PO]
--      ,[PRICE TERM]
--      ,[PAYMENNT TERM]
--      ,[ORDER TYPE]
--      ,[SHIP WAY]
      
HAVING 
    COUNT(*) > 1;
 
ik heb een oplossing gevonden die voor mij werkt. ik kopieer alle data in de temp tabel. vervolgens doe ik een check up dubs en verwijder deze. vervolgens kopieer ik de unieke records naar de doel tabel waar ik nog een check doe of ze al bestaan.

de dub check is alsvolgt

Code:
-- remove dubs
WITH duplicates  AS( SELECT DENSE_RANK() OVER(PARTITION BY [tcusCustomerPo] ORDER BY [ID] ) AS dups, 
     [ID],[tcusCustomerPo]
      ,[tcusPriceTerm]
      ,[tcusPaymenntTerm]
      ,[tcusOrderType]
      ,[tcusShipWay]

FROM ##PoCusTemp ) 

DELETE ##PoCusTemp 

WHERE [ID] IN ( SELECT [ID] FROM duplicates WHERE dups > 1);
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan