日期:2014-05-18  浏览次数:20346 次

求一SQL转换
SQL code
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       删除
*/


------解决方案--------------------
http://topic.csdn.net/u/20080612/22/c850499f-bce3-4877-82d5-af2357857872.html?23514
------解决方案--------------------
SQL code


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 行受影响)

*/

------解决方案--------------------
SQL code

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           添加