2016-06-11 72 views
0

我有一個表,如下所示:顯示結果,當條件SQL查詢滿足

Username | Status 
aaa  | Pending 
bbbbbbb | Pending 
cccc  | Cancelled 
dddddddd | Cancelled 
eeeeee  | Approved 
ffffff  | Approved 

,我想在最後顯示結果是這樣的:

Status | Username 
Pending | ***aaa, ***bbbb 
Cancelled | ***cccc, ***ddddd 
Approved | ***eee, ***fff 

我試圖做這個選擇查詢

SELECT distinct status,CASE WHEN LENGTH(username) >=6 THEN GROUP_CONCAT(replace(username, left(username, 3) , '***') SEPARATOR ', ') ELSE GROUP_CONCAT('***',username SEPARATOR ', ') END AS Username FROM table group by status 

然而,bbbbbbb結果來回我的查詢不起作用,因爲第一行有3個字符的用戶名。所以,結果變成這樣:

Status | Username 
Pending | ***aaa, ***bbbbbbb  // wrong (it should be ***aaa , ***bbbb) 
Cancelled | ***cccc, ***ddddd // true 
Approved | ***eee, ***fff // true 

如何執行查詢以顯示我預期的結果?前

+0

你用'(username)> = 3'得到了什麼結果? – C2486

+0

'aaa'將顯示''***只有當我使病情'長度(用戶名)> = 3',我想顯示'*** aaa' @Rishi –

+0

我想你想隱藏用戶全名,如果用戶名是'aaa',你爲什麼要顯示'*** aaa',它顯示完整的用戶名,你可以顯示像'******'一樣的顯示嗎? – C2486

回答

1

謝謝據我瞭解,你需要移動CASEGROUP_CONCAT。就像這樣:

SELECT DISTINCT status, 
    GROUP_CONCAT(
    CASE 
     WHEN LENGTH(username) >= 6 THEN REPLACE(username, LEFT(username, 3), '***') 
     ELSE CONCAT('***', username) 
    END SEPARATOR ', ' 
)AS Username 
FROM table 
GROUP BY status 
+0

yeahhh !!!!終於....我從來沒有想過我可以把'CASE'放在'GROUP_CONCAT'裏面..謝謝你! –