【问题标题】:Pivot data in SQL Server在 SQL Server 中透视数据
【发布时间】:2012-03-21 09:49:11
【问题描述】:

我需要使用 SQL Server 2008R2 存储过程创建一个报告,该过程将返回以下数据形状:

我在 SQL Server 中的视图返回如下数据:

用户将选择 start_date 和 end_date,并且该日期范围将显示在列中,即如果用户选择 2012 年 4 月 1 日至 2012 年 4 月 7 日,则 7 天,第 1 天至第 7 天将显示在列中。左列将显示“ApplicationId”字段的总数。 请注意,“已分配”、“处理中”、.. 是状态字段。

【问题讨论】:

    标签: sql-server pivot-table


    【解决方案1】:

    检查这个例子..就像我使用这个例子一样。您可以创建动态列/动态透视。但你必须在 sql server 中使用execute

    您可以根据需要实施/修改您的查询。

    参考:Pivots with Dynamic Columns in SQL Server 2005

    DECLARE @query NVARCHAR(4000) SET @query = N'SELECT tID, '+ @cols +' FROM (SELECT  t2.tID
          , t1.ColName
          , t2.Txt FROM    Table1 AS t1
            JOIN Table2 AS t2 ON t1.ColId = t2.ColID) p PIVOT ( MAX([Txt]) FOR ColName IN ( '+ @cols +' ) ) AS pvt ORDER BY tID;'
    
    Executing this with
    
    EXECUTE(@query)
    

    有关此的更多参考:
    SQL Server - Dynamic PIVOT Table - SQL Injection
    Dynamic PIVOT Query For Cross Tab Result
    Dynamic Pivoting in SQL Server - 它包含一些符合您要求的示例..

    希望对您有所帮助..

    【讨论】:

    • 生成动态列是实际问题:(
    【解决方案2】:

    您可以使用一点 DATEDIFF 和 PIVOT 来完成。像这样……

    select name, max(DAY_1) as DAY_1, max(DAY_2) as DAY_2, max(DAY_3) as DAY_3, max(DAY_4) as DAY_4, max(DAY_5) as DAY_5 from (
    SELECT s.value_Date, name, end_datetime,
    'DAY_' + cast( DATEDIFF(DAY, dates.value_date, today.value_date) as varchar) as day
    FROM schema1.VW_SKY_BATCH_STATUS S
    CROSS JOIN (select top 1 VALUE_DATE from schema2.BUSINESS_DATE where CALENDAR = 'london' order by VALUE_DATE desc) as today
    JOIN (select top 6 VALUE_DATE from schema2.BUSINESS_DATE where CALENDAR = 'london' order by VALUE_DATE desc) dates on dates.VALUE_DATE = s.VALUE_DATE
    JOIN Reports.REPORT_DESCRIPTION rd on rd.ID = s.PROFILE_ID)
    AS SourceTable
    PIVOT (MAX(end_datetime) FOR day IN (DAY_1, DAY_2, DAY_3, DAY_4, DAY_5)) AS pt 
    GROUP BY name
    

    【讨论】:

    • 如何生成动态日期列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多