2016-06-11 60 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'里面..谢谢你! –