单行中的SQL Pivot查询

时间:2019-01-18 04:49:53

标签: sql-server

我有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      ---

请查看此屏幕截图:

Please see image

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

Live Demo Here