2017-05-16 6 views
0

Ich habe eine Tabelle mit den folgenden SpaltenLöschen von doppelten Zeilen aus temporärer Tabelle in SQL

+-------+------------+------------+ 
| AssID | QuestionID | AnswerText | 
+-------+------------+------------+ 
| 12 |   34 | Null  | 
| 12 |   34 | Sample  | 
| 13 |   35 | null  | 
| 13 |   35 | test1  | 
+-------+------------+------------+ 

I Antworttext null Reihe mit gleichen Assid und QuestionID Endgültige Ausgabe in diesem Format sein muss

entfernen müssen
+-------+------------+------------+ 
| AssId | QuestionID | AnswerText | 
+-------+------------+------------+ 
| 12 |   34 | Sample  | 
| 13 |   35 | test1  | 
+-------+------------+------------+ 

Bitte helfen Sie mir mit der Lösch-Abfrage

Vielen Dank im Voraus Sree

Antwort

0

Sie cte und row_number können

;with cte as (
    select *, RowN = Row_number() over (partition by assid, questionid order by answertext) from yourtable 
    )--or order by your id because you have not provided logic for which one to select in answertext 
delete from cte where RowN > 1 
+0

Wenn Sie durch answertetext bestellen, werden Sie die Nicht-Null-Werte löschen und die Null-Werte belassen ... das Gegenteil dessen, was die erwartete Ausgabe ist: – JamieD77

+0

Ja, das müssen Sie durch irgendeine Rowid tun, die Ihre Ausgabe definiert. Ich habe das im Kommentar erwähnt –

1

Sie existieren verwenden können, um festzustellen, ob die NULL-Antworttext Zeile auch einen Nicht-Null-Antworttext Row hat

DELETE t 
FROM MyTABLE t 
WHERE t.AnswerText IS NULL 
     AND EXISTS 
(
    SELECT * 
    FROM MyTable m 
    WHERE m.AssID = t.AssID 
      AND m.QuestionID = t.QuestionID 
      AND m.AnswerText IS NOT NULL 
) 
+0

Dank Jamie zu löschen, es funktionierte perfekt: -) – Sree

Verwandte Themen