我有SQL查询来获取数据,我的要求是逐列:
SELECT
PM.PageId, PM.PageName, ISNULL(UPA.IsAccess, 0) AS IsAccess
FROM
tblPageMaster PM
LEFT JOIN
tblUserPageAccess UPA ON UPA.PageId = PM.PageId AND UPA.UserId = 74
WHERE
PM.ModuelId = 2
输出
PageId PageName IsAccess
------------------------------
1 Dashboard1 1
2 Dashboard2 0
3 Dashboard3 1
-- N --
必填输出
Dashboard1 Dashboard2 Dashboard3 -- N --
-------------------------------------------------------
1 0 1 ---
请查看此屏幕截图:
答案 0 :(得分:1)
您可以尝试以下动态数据透视查询。
create table temp
(
PageId int,
PageName Varchar(20),
IsAccess int
)
insert into temp values (1, 'Dashboard1', 1), (2, 'Dashboard2', 0), (3, 'Dashboard3', 1)
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.PageName)
FROM temp c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + ' from
(
select IsAccess, PageName
from temp
) x
pivot
(
max(IsAccess)
for PageName in (' + @cols + ')
) p '
execute(@query)
输出如下所示
Dashboard1 Dashboard2 Dashboard3
----------------------------------
1 0 1