表结构如下:表Users
User_Id,User_Name,User_Card,User_Room表Cards
Card_Id,Card_PhysicalId表UserPasswords
UserPassword_User,UserPassword_Password,UserPassword_Limit表Rooms
Room_Id,Room_Cell,Room_Name表Cells
Cell_Id,Cell_NameUserPassword_User作为外键关联到User_Id(主键),User_Card作为外键关联到Card_Id(主键),User_Room作为外键关联到Room_Id(主键),Room_Cell作为外键关联到Cell_Id(主键)。如果某个用户启用了密码,则在UserPasswords表中会存在一条相对应的记录,如果某个用户没有启用密码,则在UserPasswords表中不存在与该用户对应的记录。User_Room的值有可能为NULL。现在想使用一条SQL语句得出如下结果,要求Users表中每一条记录都要对应到一行上:User_Id,User_Name,Card_PhysicalId,Room_Name,Cell_Name,CASE WHEN 启用了密码 THEN '已设置' ELSE '未设置' END,CASE WHEN 启用了密码 THEN COLUMN_X ELSE '不限' ENDCOLUMN_X的取值为如果UserPassword_Limit值为65535则取值'不限',否则取值为UserPassword_Limit。如果没有设置密码,也取值'不限'。
User_Id,User_Name,User_Card,User_Room表Cards
Card_Id,Card_PhysicalId表UserPasswords
UserPassword_User,UserPassword_Password,UserPassword_Limit表Rooms
Room_Id,Room_Cell,Room_Name表Cells
Cell_Id,Cell_NameUserPassword_User作为外键关联到User_Id(主键),User_Card作为外键关联到Card_Id(主键),User_Room作为外键关联到Room_Id(主键),Room_Cell作为外键关联到Cell_Id(主键)。如果某个用户启用了密码,则在UserPasswords表中会存在一条相对应的记录,如果某个用户没有启用密码,则在UserPasswords表中不存在与该用户对应的记录。User_Room的值有可能为NULL。现在想使用一条SQL语句得出如下结果,要求Users表中每一条记录都要对应到一行上:User_Id,User_Name,Card_PhysicalId,Room_Name,Cell_Name,CASE WHEN 启用了密码 THEN '已设置' ELSE '未设置' END,CASE WHEN 启用了密码 THEN COLUMN_X ELSE '不限' ENDCOLUMN_X的取值为如果UserPassword_Limit值为65535则取值'不限',否则取值为UserPassword_Limit。如果没有设置密码,也取值'不限'。
User_Id,User_Name,User_Card,User_Room表Cards
Card_Id,Card_PhysicalId表UserPasswords
UserPassword_User,UserPassword_Password,UserPassword_Limit表Rooms
Room_Id,Room_Cell,Room_Name表Cells
Cell_Id,Cell_NameUserPassword_User作为外键关联到User_Id(主键),User_Card作为外键关联到Card_Id(主键),User_Room作为外键关联到Room_Id(主键),Room_Cell作为外键关联到Cell_Id(主键)。如果某个用户启用了密码,则在UserPasswords表中会存在一条与Users表相对应的记录,如果某个用户没有启用密码,则在UserPasswords表中不存在与该用户对应的记录。
User_Room的值有可能为NULL。现在想使用一条SQL语句得出如下结果,要求Users表中每一条记录都要对应到一行上:User_Id,User_Name,Card_PhysicalId,Room_Name,Cell_Name,CASE WHEN 启用了密码 THEN '已设置' ELSE '未设置' END,COLUMN_XCOLUMN_X的取值为如果UserPassword_Limit值为65535则取值'不限',否则取值为UserPassword_Limit。如果没有设置密码,也取值'不限'。谢谢!
最好给出完整的表结构,测试数据,计算方法和正确结果.发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
select
a.user_id, a.user_name, b.Card_PhysicalId, c.Room_Name, d.Cell_Name
,[是否设置密码] = case when e.UserPassword_Password is not null
then '已设置'
else '未设置'
end
,[是否不限] = case when e.UserPassword_Password is not null and e.UserPassword_Limit <> 65535
then cast(UserPassword_Limit as varchar)
else '不限'
end
from
Users a
left join Cards b on a.user_card = b.card_id
left join Rooms c on a.User_Room = c.Room_Id
left join Cells d on c.Room_Cell = d.Cell_Name
left join UserPasswords e on a.User_Id = e.UserPassword_User