表结构如下:表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。如果没有设置密码,也取值'不限'。

解决方案 »

  1.   

    表结构如下:表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表中会存在一条与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。如果没有设置密码,也取值'不限'。谢谢!
      

  2.   

    我自己用UNION写了一个,但是不喜欢UNION,哈哈,所以就求高手了。
      

  3.   

    看了半天没看懂关系.
    最好给出完整的表结构,测试数据,计算方法和正确结果.发帖注意事项
    http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
      

  4.   


    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