Я застрял в своем вопросе о том, как удалить или, вернее, пропустить публикацию, если существует другая.

enter image description here

Это мой стол.

Если столбец L_ID имеет значение 821 И 201 для одного и того же P_ID , тогда «удалите» или не используйте 201 и sum(), тогда время

Это сделает P_ID 80 и 946 только двумя строками.

Это, наверное, проще, чем я думаю, но я застрял.

1
Nils 22 Окт 2015 в 11:30

2 ответа

Лучший ответ

Попробуйте так:

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;

Результат:

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
1
Shnugo 22 Окт 2015 в 09:19

Попробуйте этот код:

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)
0
Nguyễn Hải Triều 22 Окт 2015 в 09:11