SQL Server-将列转换为行

克里希那拉(Krishnaraj Barvathaya)

我有一张桌子,简单的选择给出如下

在此处输入图片说明

我想写一条选择语句输出如下

在此处输入图片说明

有人能帮我吗...

塔林

因为你基本上旋转你当前的列SaleIncomeProfit进入行,然后将month值列,那么你会想先unpivot的当前列,然后转动的月份。

根据您的SQL Server版本,有几种方法可以取消数据透视。您可以使用UNPIVOT函数或交叉应用:

select month, type, value
from yourtable
cross apply
(
  select 'Sale', sale union all
  select 'Income', Income union all
  select 'Profit', Profit
) c (type, value)

请参见带有演示的SQL Fiddle这会将您当前的数据转换为:

| MONTH |   TYPE | VALUE |
|-------|--------|-------|
|   Jan |   Sale |   100 |
|   Jan | Income |    50 |
|   Jan | Profit |    10 |
|   Feb |   Sale |    20 |
|   Feb | Income |    40 |

然后,您可以使用PIVOT函数将月份转换为列标题。

select type, Jan, Feb, Mar, Apr
from
(
  select month, type, value
  from yourtable
  cross apply
  (
    select 'Sale', sale union all
    select 'Income', Income union all
    select 'Profit', Profit
  ) c (type, value)
) d
pivot
(
  sum(value)
  for month in (Jan, Feb, Mar, Apr)
) piv;

请参见带有演示的SQL Fiddle

如果您的月份数未知,则可以使用动态SQL:

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

select @cols = STUFF((SELECT distinct N',' + QUOTENAME(Month) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = N'SELECT type, ' + @cols + N' 
            from 
            (
                select month, type, value
                from yourtable
                cross apply
                (
                  select ''Sale'', sale union all
                  select ''Income'', Income union all
                  select ''Profit'', Profit
                ) c (type, value)
            ) x
            pivot 
            (
                sum(value)
                for month in (' + @cols + N')
            ) p '

execute sp_executesql @query;

参见带有演示的SQL Fiddle

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将行转换为列SQL Server

来自分类Dev

将列转换为行SQL Server

来自分类Dev

将行转换为列SQL Server

来自分类Dev

SQL Server将行转换为列

来自分类Dev

将行转换为SQL Server中的常量列?

来自分类Dev

Microsoft SQL Server:将3行转换为3列

来自分类Dev

将列转换为SQL Server 2012中的行

来自分类Dev

SQL Server如何将列值转换为行

来自分类Dev

将列数据转换为行,SQL Server 2008

来自分类Dev

将(文本)行转换为SQL Server 2014中的列

来自分类Dev

使用SQL Server将行转换为列

来自分类Dev

SQL Server 2008:将行转换为列

来自分类Dev

将数据列转换为SQL Server中的数据行

来自分类Dev

SQL SERVER 2008 QUERY将行转换为多列

来自分类Dev

根据 SQL Server 中的条件将列转换为行

来自分类Dev

如何将 SQL Server 行转换为多列?

来自分类Dev

查询将列转换为 sql server 中的行

来自分类Dev

将行转换为 sql server 中的列

来自分类Dev

SQL Server-将天转换为列,将小时转换为行

来自分类Dev

将行从sql server转换为oracle

来自分类常见问题

通过合并2列以形成新列,将行转换为SQL Server中的列

来自分类Dev

通过合并2列以形成新列,将行转换为SQL Server中的列

来自分类Dev

将一列“行”转换为SQL Server查询中的仅一列

来自分类Dev

SQL Server-根据“类型列”将列转换为行

来自分类Dev

在SQL Server中进行内部联接后将行转换为列

来自分类Dev

SQL Server-Pivot将行转换为列(带有其他行数据)

来自分类Dev

在SQL Server 2017中将行转换为有条件的列

来自分类Dev

如何在Sql Server 2008 R2中将列转换为行?

来自分类Dev

Sql Server 将列转换为行用零或现有值填充 NULL

Related 相关文章

热门标签

归档