如何在SQL Server中的行中转换列

时间:2018-04-07 11:53:25

标签: sql sql-server

我目前的结果

/url/to/the/page#tag2

我想要这个结果

Action Name                Is Deleted
--------------------------------------
Account Detail Tap             0
Travel Insurance Tap           0
Blacklist Tap                  0

我当前的查询

Account Detail Tap    Travel Insurance Tap     Blacklist Tap
-----------------------------------------------------------
        0                     0                       0

2 个答案:

答案 0 :(得分:2)

你似乎有点绝望......第一次和你的外科医生一样,你不想要一个眼花缭乱的编码器。

这会将子查询转换为一条记录。如果将ScreenID添加到子查询并删除WHERE部分,则可以获得更多记录

Select *
 From (
        SELECT [AM].ActionNameEnglish
             , [RSM].IsDeleted
        FROM   ScreenMaster [SM] 
         INNER JOIN ActionMaster [AM] ON [SM].ScreenID = [AM].ScreenID 
         INNER JOIN RoleScreenMapping [RSM] ON [AM].ActionID = [RSM].ActionID
         WHERE [SM].ScreenID = 1031 AND [RSM].IsDeleted = 0
      ) Src
 Pivot (max(IsDeleted) for ActionNameEnglish in ([Account Detail Tap],[Travel Insurance Tap],[Blacklist Tap]) ) Pvt

答案 1 :(得分:1)

- 您可以像下面这样编写查询以动态获取列

CREATE TABLE #tbl (ActionName varchar(255), IsDeleted INT)

insert into #tbl values ('Account Detail Tap',0)
insert into #tbl values ('Travel Insurance Tap',0)
insert into #tbl values ('Blacklist Tap',0)


select * from #tbl

DECLARE @COL VARCHAR(1000)
DECLARE @Query VARCHAR(2000)
select @col = COALESCE(@col + ', ','') + QUOTENAME(ActionName)
from #tbl Group by ActionName
Set @Query='select * from (select [ActionName],IsDeleted from #tbl) src 
PIVOT (Max(IsDeleted) FOR ActionName
IN ('+@col+')) pvt'
EXEC(@Query)

DROP TABLE #tbl