C# - SQL Server中的Bit数据类型上的PIVOT&将结果分配给datagridview

时间:2015-03-15 09:55:29

标签: c# sql sql-server

我在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;

在查询中StatusIdbit数据类型列。

enter image description here

我的问题是,你如何PIVOT在SQL Server&中的bit数据类型上?将结果分配给datagridview(位列作为复选框)?

1 个答案:

答案 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