Si une valeur existe, en supprimer une autre

Je suis coincé dans ma requête sur la façon de supprimer ou plutôt d'ignorer un message s'il en existe un autre.

entrez la description de l'image ici

C'est ma table.

si la colonne L_ID a la valeur 821 et 201 pour le même P_ID alors "remove" ou ne pas utiliser 201 et sum() alors le time

Cela rendrait P_ID 80 et 946 seulement 2 lignes.

C'est probablement plus facile que je ne le pense mais je suis coincé.

Essayez-le comme ceci:

 CREATE TABLE #YourTable(P_ID INT, L_ID INT, [Date] Date, [Time] DECIMAL(6,2)); INSERT INTO #YourTable VALUES (80,201,{d'2015-08-01'},24.0) ,(80,821,{d'2015-08-01'},24.0) ,(80,822,{d'2015-08-01'},32.0) ,(946,201,{d'2015-08-01'},16.0) ,(946,821,{d'2015-08-01'},16.0) ,(946,819,{d'2015-08-01'},6.65) ,(6758,201,{d'2015-08-01'},7.25) ,(6758,200,{d'2015-08-01'},7.25) ; --Test output SELECT * FROM #YourTable; --Set the SUMs in those lines with L_ID=821 UPDATE #YourTable SET [Time]=(SELECT SUM(x.[Time]) FROM #YourTable AS x WHERE x.P_ID =#YourTable.[P_ID] AND x.L_ID IN (821,201)) WHERE #YourTable.L_ID=821 --Delete the rows with L_ID=201 if there is one with 821 too DELETE FROM #YourTable WHERE L_ID = 201 AND EXISTS(SELECT * FROM #YourTable AS x WHERE x.P_ID = #YourTable.P_ID AND x.L_ID =821 ) --The ID was wrong here, sorry... --Test output SELECT * FROM #YourTable; --Clean up DROP TABLE #YourTable; 

Résultat:

 P_ID L_ID Date Time 80 821 2015-08-01 48.00 80 822 2015-08-01 32.00 946 821 2015-08-01 32.00 946 819 2015-08-01 6.65 6758 201 2015-08-01 7.25 6758 200 2015-08-01 7.25 

Essayez ce code:

 SELECT *, SUM(Time) OVER(PARTITION BY P_ID, L_ID, Date) AS 'Sum' FROM Your_Table WHERE L_ID <> 201 AND P_ID NOT IN ( SELECT E1.P_ID FROM Your_Table E1 INNER JOIN Your_Table E2 ON E1.P_ID = E2.P_ID WHERE E1.L_ID = 821 AND E2.L_ID = 201)