【发布时间】:2016-02-21 05:36:55
【问题描述】:
我正在处理具有多个参数的客户数据,例如列中的每个月的预计单位、预计值、数量单位、数量值、Parm 单位、Parm 值。
每个参数都以月份名称为前缀,例如 JAN_Projected units、JAN_ Projected value、JAN_Quantity units、JAN_ Quantity value、JAN_ Parm Units、JAN_ Parm Value。
这是我的表的架构:
CREATE TABLE [dbo].[tbl_forum_data](
[Sno] [float] NULL,
[JAN_Projected units] [float] NULL,
[JAN_Projected value] [float] NULL,
[JAN_Quantity units] [float] NULL,
[JAN_Quantity value] [float] NULL,
[JAN_Parm Units ] [float] NULL,
[JAN_Parm Value ] [float] NULL,
[FEB_Projected units] [float] NULL,
[FEB_Projected value] [float] NULL,
[FEB_Quantity units] [float] NULL,
[FEB_Quantity value] [float] NULL,
[FEB_Parm Units ] [float] NULL,
[FEB_Parm Value ] [float] NULL,
[MAR_Projected units] [float] NULL,
[MAR_Projected value] [float] NULL,
[MAR_Quantity units] [float] NULL,
[MAR_Quantity value] [float] NULL,
[MAR_Parm Units ] [float] NULL,
[MAR_Parm Value ] [float] NULL
) ON [PRIMARY]
我想根据每个月对每个预计单位、预计值、数量单位、数量值、参数单位和参数值进行分组,如下图所示
如果这不可能,至少我想将列更改为行并将单位分组为单独的列,并将值分组为单独的列,如下所示。
我尝试进行交叉连接,但是我能够将值放入行中。下面是我使用的代码:
select Sno
,G.EventName
,G.EventDate
from [db_Temp].[dbo].[tbl_forum_data] as T
cross apply (values ([JAN_Projected units], 'JAN_Projected units'),
([JAN_ Projected value], 'JAN_ Projected value'),
([JAN_Quantity units], 'JAN_Quantity units'),
([JAN_ Quantity value], 'JAN_ Quantity value'),
([JAN_ Parm Units ], 'JAN_ Parm Units'),
([JAN_ Parm Value ], 'JAN_ Parm Value'),
([FEB_ Projected units], 'FEB_ Projected units'),
([FEB_ Projected value], 'FEB_ Projected value'),
([FEB_Quantity units], 'FEB_Quantity units'),
([FEB_ Quantity value], 'FEB_ Quantity value'),
([FEB_ Parm Units ], 'FEB_ Parm Units'),
([FEB_ Parm Value ], 'FEB_ Parm Value'),
([MAR_ Projected units], 'MAR_ Projected units'),
([MAR_ Projected value], 'MAR_ Projected value'),
([MAR_ Quantity units], 'MAR_ Quantity units'),
([MAR_ Quantity value], 'MAR_ Quantity value'),
([MAR_ Parm Units ], 'MAR_ Parm Units'),
([MAR_ Parm Value ], 'MAR_ Parm Value')) as G(EventDate, EventName);
非常感谢任何帮助。提琴手SQL Schema的链接。
【问题讨论】:
标签: sql-server tsql sql-server-2012 unpivot