-1

你能帮我实现以下目标吗

我有这个 SQL 输出表

日期周 Keep_1 This_1 Order_1 Keep_2 This_2 Order_2 Keep_1-Keep_2 This_1-This_2 Order_1-Order_2
2013 年 1 月 1 日 9 8 7 6 5 4 3 3 3

并将其变成

RowOrder Column_1 Column_2 Column_1-Column_2
保持 9 6 3
这 8 5 3
订购 7 4 3

如您所见,我必须保持行中的顺序,所以我不能按字母顺序排列。此外,我必须将它们堆叠Keep_1 This_1 Order_1在一起并一起Keep_2 This_2 Order_2操作Column_1Column_2

任何想法如何实现这一目标?

谢谢

4

1 回答 1

1

如果您使用的是 SQL Server 2008+,那么您可以使用CROSS APPLYand VALUES

select c.roworder,
  c.col1,
  c.col2,
  c.col3
from yourtable t
cross apply
(
  values 
    ('Keep', Keep_1, Keep_2, Keep_1_Keep_2),
    ('This', This_1, This_2, This_1_This_2),
    ('Order', Order_1, Order_2, Order_1_Order_2)
) c (roworder, col1, col2, col3)

请参阅SQL Fiddle with Demo

这也可以使用UNION ALL任何数据库中的查询来完成:

select 'Keep' RowOrder, 
  Keep_1 col1, 
  Keep_2 col2, 
  Keep_1_Keep_2 col3
from yourtable
union all
select 'This' RowOrder, 
  This_1 col1, 
  This_2 col2, 
  This_1_This_2 col3
from yourtable
union all
select 'Order' RowOrder, 
  Order_1 col1, 
  Order_2 col2, 
  Order_1_Order_2 col3
from yourtable

请参阅带有演示的 SQL Fiddle

于 2013-03-13T17:25:48.627 回答