在描述中使用未知数量的数据透视 - SQL Server 2008

时间:2017-11-13 07:32:46

标签: sql sql-server sql-server-2008 tsql pivot

请问有人请教我如何在SQL SERVER 2008中获得结果

2 个答案:

答案 0 :(得分:0)

在您的查询中尝试以下更改

set @query = 'SELECT  ' + @cols + ' from 
             (
                select [Generic Name], Description
                from @TABLE
            ) x
            pivot 
            (
                MAX([Generic Name])
                for Description in (' + @cols + ')
            ) p '

由于您正在转移记录,因此不会有列 [通用名称] - 我不会在表格结构中看到任何此类列,因此我&#39 ; m假设您需要列基本名称 - 所以@Cols参数就足够了

请检查Demo此处

答案 1 :(得分:0)

你是否想要做这样的事情:

IF OBJECT_ID('tempdb..#TABLE') IS NOT NULL
BEGIN;
    DROP TABLE #TABLE;
END;

CREATE TABLE #TABLE
(
[Generic Name] varchar(15),
[Description]varchar(15)
)

INSERT #TABLE

SELECT 'RESISTOR',  'POWER' UNION ALL
SELECT 'RESISTOR',  'Type' UNION ALL
SELECT 'RESISTOR',  'DESIGN' UNION ALL
SELECT 'RESISTOR',  'Material' UNION ALL
SELECT 'OTHER',  'Other' UNION ALL
SELECT 'OTHER',  'Material'; 

DECLARE @cols NVARCHAR(MAX)
       ,@query NVARCHAR(MAX);


select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Description) 
                    from #TABLE
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT [Generic Name], ' + @cols + ' 
            FROM
            (
                SELECT [Generic Name], [Generic Name] AS [BaseName], [Description]
                from #TABLE
            ) DS
            pivot 
            (
                COUNT([BaseName])
                for [Description] in (' + @cols + ')
            ) p '

            SELECT @query

execute(@query)

enter image description here

这将显示每个通用名称的count(但如果每个描述只有一条记录,则只有true / have或false / not)。