2015-12-11 155 views
0

刪除不需要的行我做了SELECT與CASE語句,這以下內容:SQL Server從CASE語句

SELECT DISTINCT 
n.NiveauId, n.Description, 
CASE WHEN n.NiveauId NOT IN (SELECT ccs.idNiveau WHERE ccs.centreCout = 60001) THEN 0 ELSE 1 END AS attribue 
FROM pa.dbo.Niveau n 
JOIN BDC.dbo.CentreCoutSecteur ccs ON n.NiveauId = ccs.idNiveau 

解說: 萬一「NiveauId」不存在於其他表,價值「attribue」爲0。否則,如果是,則該值是1。

這工作,而是一個包含1每行也顯示在同一行有0

例:

enter image description here

如何更改SELECT查詢以刪除包含0的不需要的重複行?

提前致謝!

+0

請問您的情況選擇(單獨運行時),包含給定NiveauID多行? – DiscipleMichael

+0

另外,如果你不確定,DISTINCT子句將評估select語句中的所有字段,也就是說,如果你有兩行具有相同的NiveauID和Description,但是不同的Attribue值......兩行都是不同的,包含在結果中 – DiscipleMichael

+0

我已經選擇了「attribue」這個案例,沒有NiveauId和Description,結果是兩行,分別是1和0.這就是你的意思嗎? – Yannick

回答

0

嘗試包裝你的選擇在MAX(如果您只想與attribue最高值的行。

SELECT b.NiveauID, b.Description, MAX(b.attribue) 
FROM 
    (SELECT DISTINCT 
     n.NiveauId, n.Description, 
     CASE WHEN n.NiveauId NOT IN (SELECT ccs.idNiveau WHERE ccs.centreCout = 60001) THEN 0 ELSE 1 END AS attribue 
    FROM pa.dbo.Niveau n 
    JOIN BDC.dbo.CentreCoutSecteur ccs ON n.NiveauId = ccs.idNiveau) b 
Group By b.NiveauID, b.Description 
+0

可能有一個更優雅的方式來做到這一點,但這應該工作。這只是將NiveauID已經擁有的內容進行分組。對於NiveauID的每個值(如果有多行),它只會選擇具有最高值的行。意思是,如果有一行有0,而一行有1,它只會返回1行。但是,如果只有一行(0或1),它將返回該行。合理? – DiscipleMichael

+0

酷!從你的例子中,我只需要在「group by」中添加「b.Description」並且它可以工作!謝謝! – Yannick

+0

是的,我錯過了。很高興它的工作 – DiscipleMichael