我在SQL Server中编写了这个查询,它给出了如下图所示的输出。
而不是零我想要复选框列。
set @str = STUFF ((Select ',' + QUOTENAME(CategoryName)
From dbo.Master_ItemCategoryMaster
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
Print @str
set @query = N'Select [PlaceId],[PlaceName],' +@str +N'
From
(Select ID as [PlaceId], CommonName as [PlaceName],(cast (ISNULL(PC.StatusId, 0) as tinyint)) as [StatusId],IC.CategoryName
From dbo.Master_CommonMaster CM
CROSS JOIN dbo.Master_ItemCategoryMaster IC
LEFT OUTER JOIN dbo.Master_PlaceWiseCategory PC ON PC.PlaceId = CM.ID
AND PC.CategoryId = IC.CatID
Where CM.TypeId = 2 and IC.ItemGroup ! = 101
)AS M
PIVOT
(
MAX([StatusId]) For CategoryName IN ('+@str+N')
)as P
'
exec sp_executesql @query;
在查询中StatusId
是bit
数据类型列。
我的问题是,你如何PIVOT
在SQL Server&中的bit
数据类型上?将结果分配给datagridview(位列作为复选框)?
答案 0 :(得分:1)
declare @str as varchar(MAX)
declare @str1 as varchar(MAX)
declare @query as nvarchar(MAX)
set @str = STUFF ((Select ',' + QUOTENAME(CategoryName)
From dbo.Master_ItemCategoryMaster
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @str1 = STUFF ((Select ',' + 'cast('+ QUOTENAME(CategoryName)
+' as bit) as ' + QUOTENAME(CategoryName)
From dbo.Master_ItemCategoryMaster
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
Print @str
set @query = N'
Select [PlaceId],[PlaceName],' +@str1 +N'
From
(
Select ID as [PlaceId], CommonName as [PlaceName],(cast (ISNULL(PC.StatusId, 0) as tinyint)) as [Select],IC.CategoryName
From dbo.Master_CommonMaster CM
CROSS JOIN dbo.Master_ItemCategoryMaster IC
LEFT OUTER JOIN dbo.Master_PlaceWiseCategory PC ON PC.PlaceId = CM.ID
AND PC.CategoryId = IC.CatID
Where CM.TypeId = 2 and IC.ItemGroup ! = 101
)AS M
PIVOT
(
MAX([Select]) For CategoryName IN ('+@str+N')
)as P
'
exec sp_executesql @query;
String @ str1(动态列列表)用作列列表,其中列被转换为位 &安培; @str用于Pivot