在Sql中,如何使用case语句更改值?

时间:2013-08-30 15:23:08

标签: sql sql-server-2008 switch-statement case

问题:      更改group_id AS RoleId列中的值的最佳方法是什么,以便在group_id AS RoleId = 3时将值更改为对应的值5?

背景:      在以下查询中,我将比较来自两个不同数据库的两个表,而没有真正的唯一键。我必须将一个表上的first_name和last_name列合并为别名,然后将其与其他表Name列进行比较。它产生我想要的结果,但是,它们有两列与RoleId列和group_id列相关。它们具有相应的值,因此例如RoleId = 5与group_id = 3相同,但RoleId = 4与group_id = 4相同。

选择声明:

SELECT 
    users.UserName,
    users.phone,
    users.email,
    users.status,
    users.group_id AS RoleId   
FROM 
    (SELECT 
        Table1.dbo.users.first_name +' '+ Table1.dbo.users.last_name AS UserName,
        Table1.dbo.users.phone,
        Table1.dbo.users.email,
        Table1.dbo.users.status,
        Table1.dbo.users.group_id
     FROM
        Table1.dbo.users
    ) AS users
LEFT JOIN
    Table2.dbo.UsersInfo ON
    users.UserName = Table2.dbo.UsersInfo.Name
WHERE 
    Table2.dbo.UsersInfo.Name IS NULL 

1 个答案:

答案 0 :(得分:1)

如果您想将组ID 3翻译为角色ID 5并保持其余不变,则应该这样做;

SELECT 
users.UserName,
users.phone,
users.email,
users.status,
CASE WHEN users.group_id=3 THEN 5 ELSE users.group_id END AS RoleId
...