繁体   English   中英

使用SQL PIVOT从列到行…SQL Server 2008 R2

[英]Columns to Rows using SQL PIVOT… SQL Server 2008 R2

我必须将所有从表中的行转置为SQL Server 2008 R2中的列...我已使用Pivot将一列的多行转置为具有多列的一行。 我不确定在这种情况下如何使用数据透视...

我想根据“ EXPENSE”列来透视表

SQL小提琴

所需的输出是

在此处输入图片说明

同时,我将尝试探索建议的相关职位。

非常感谢您的建议...

根据所需的结果,看起来您需要先进行无轴转换,然后再进行轴转换,如下所示:

select 
    YEAR, 
    [Bps on Assets],[Setup Fee],[Account Min],[BAA Fees],[RedTail Fees (CRM)],
    [RedTail Fees (Per User)],[External IT],[External IT Setup] 
from (
    select Expense, value, year 
    from SM_TechBundleExpnsRates
    unpivot (
       value FOR year IN ([Year1], [Year2], [Year3], [Year4], [Year5]) 
    ) up 
) a
pivot (
    sum(value) for expense in 
          (
           [Bps on Assets],[Setup Fee],[Account Min],
           [BAA Fees],[RedTail Fees (CRM)],
           [RedTail Fees (Per User)],[External IT],[External IT Setup]
          )
) p

示例SQL提琴

请注意,这绝不是动态的,而是使用硬编码的列值来表示年数和费用。 可以以动态方式生成代码-如果您想知道如何有很多好的答案来说明如何使用SQL Server进行动态数据透视。

编辑:做了动态版本的乐趣,它可能不是完美的,但它应该工作:

DECLARE @sql AS NVARCHAR(MAX)
DECLARE @year_cols AS NVARCHAR(MAX)
DECLARE @expe_cols AS NVARCHAR(MAX)

SELECT @expe_cols= ISNULL(@expe_cols + ',','') + QUOTENAME(Expense)
FROM (SELECT DISTINCT Expense FROM SM_TechBundleExpnsRates) AS Expenses

SELECT @year_cols= ISNULL(@year_cols + ',','') + QUOTENAME(year) 
FROM (
    SELECT c.name AS year 
    FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id 
    WHERE t.name = 'SM_TechBundleExpnsRates' AND c.name LIKE '%Year%'
) AS Years


SET @sql = N'
SELECT 
    Year, ' + @expe_cols + '    
FROM (
    SELECT Expense, Value, Year 
    FROM SM_TechBundleExpnsRates
    UNPIVOT ( Value FOR Year IN (' + @year_cols + ') ) AS up
) a PIVOT ( SUM(Value) FOR Expense IN (' + @expe_cols + ') ) p'

EXEC sp_executesql @sql

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM