【问题标题】:Pivot for Unknown number of values in description- SQL Server 2008描述中未知数量的值的透视 - SQL Server 2008
【发布时间】:2018-04-25 19:53:32
【问题描述】:

请有人帮助我如何在 SQL SERVER 2008 中获得结果

【问题讨论】:

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


    【解决方案1】:

    您是否正在尝试做这样的事情:

    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)
    

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

    【讨论】:

    • 我不确定,但我遇到错误,例如:选择列表中的元素数量超过了 4096 个元素的最大允许数量。
    • 您只能SELECT 4096 列这是 SQL Server 限制 - docs.microsoft.com/en-us/sql/sql-server/… - 这意味着您有超过 4096 个唯一描述。您可以尝试在零件上选择它们 - 首先是 4096,然后是第二个,依此类推,然后在零件上返回它们。
    • 处理这种情况的任何方式。请建议
    • 如果您在client side应用程序中返回此数据,您可以将其分隔并使用不同的行集部分返回。
    • 非常感谢:是否可以将每个通用名称、设计、材料、其他、功率和类型的结果作为列名下列的值作为 Desc1、Desc2... .DescN
    【解决方案2】:

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

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

    由于您正在旋转记录,因此不会有列 [Generic Name] -- 我在表结构中没有看到任何这样的列,所以我假设您需要到列 Base Name--所以,@Cols 参数就足够了

    请在此处查看Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多