日期:2014-05-18 浏览次数:20415 次
CREATE TABLE sys_module ( module_id int, module_name varchar(20) ) INSERT INTO sys_module SELECT 1, '公司管理' UNION SELECT 2, '员工管理' CREATE TABLE sys_function ( function_id int, function_name varchar(20), module_id int ) INSERT INTO sys_function SELECT 1, '添加', 1 UNION SELECT 2, '修改', 1 UNION SELECT 3, '添加', 2 UNION SELECT 4, '修改', 2 UNION SELECT 5, '查看', 2 UNION SELECT 6, '删除', 2 /* 得到结果: 1 公司管理 1 添加 2 修改 2 员工管理 3 添加 4 修改 5 查看 6 删除 */
CREATE TABLE #sys_module ( module_id int, module_name varchar(20) ) INSERT INTO #sys_module SELECT 1, '公司管理' UNION SELECT 2, '员工管理' CREATE TABLE #sys_function ( function_id int, function_name varchar(20), module_id int ) INSERT INTO #sys_function SELECT 1, '添加', 1 UNION SELECT 2, '修改', 1 UNION SELECT 3, '添加', 2 UNION SELECT 4, '修改', 2 UNION SELECT 5, '查看', 2 UNION SELECT 6, '删除', 2 --如果function_name不是很多个的话,可以 select a.*,b.function_name,b.function_id into #temp from #sys_module a join #sys_function b on a.module_id=b.module_id select distinct a.module_id,a.module_name,b.function_id,b.function_name ,c.function_id,c.function_name,d.function_id,d.function_name ,e.function_id,e.function_name from #temp a left join #temp b on a. module_name=b.module_name and a.module_id= b.module_id and b.function_name='添加' left join #temp c on a. module_name=c.module_name and a.module_id= c.module_id and c.function_name='修改' left join #temp d on a. module_name=d.module_name and a.module_id= d.module_id and d.function_name='查看' left join #temp e on a. module_name=e.module_name and a.module_id= e.module_id and e.function_name='删除' /* module_id module_name function_id function_name function_id function_name function_id function_name function_id function_name ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- 1 公司管理 1 添加 2 修改 NULL NULL NULL NULL 2 员工管理 3 添加 4 修改 5 查看 6 删除 (2 行受影响) */
------解决方案--------------------
SELECT B.module_id ,B.module_name ,A.TJ ,C.function_name ,A.XG ,D.function_name ,A.CK ,E.function_name ,A.SC ,F.function_name FROM( SELECT module_id ,[添加] AS TJ ,[修改] AS XG ,[查看] AS CK ,[删除] AS SC FROM sys_function PIVOT (MAX(function_id) FOR function_name IN ([添加],[修改],[查看],[删除])) PIV ) A JOIN sys_module B ON A.module_id = B.module_id LEFT JOIN sys_function C ON A.TJ = C.function_id LEFT JOIN sys_function D ON A.XG = D.function_id LEFT JOIN sys_function E ON A.CK = E.function_id LEFT JOIN sys_function F ON A.SC = F.function_id /* module_id module_name TJ function_name XG function_name CK function_name SC function_name ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- ----------- -------------------- 1 公司管理 1 添加 2 修改 NULL NULL NULL NULL 2 员工管理 3 添加