将几个sql列合并为一个

时间:2013-08-06 15:39:24

标签: sql sql-server

我需要一些帮助。我正在尝试将一些数字和项目组合成基本上两列。我有一个表有7个Item列和7个qty列以及一个日期和id字段。

enter image description here

我怎样才能将它们全部组合成几列,即使这些项重复?我试图这样做:Item1 QTY DATE项目1可能重复次数与列中的次数相同。

如果可能,结果必须只是项目的一列和qty的一列以及旁边的Date列。

我通常不是这里的SQL人,所以请光临我。

这是我当前的选择陈述

SELECT TOP (100) PERCENT 
    Item1, Qty1, Item2, Qty2, Item3, Qty3, Item4, Qty4, Item5, Qty5, 
    Item6, Qty6, Item7, Qty7, Date, ID
FROM         
    dbo.ITEMREPORT1

2 个答案:

答案 0 :(得分:3)

为了将多列放入多行,您需要取消数据的显示。如果您使用的是SQL Server 2008+,则可以使用VALUES实现CROSS APPLY:

select c.item, c.qty, i.date
from dbo.ITEMREPORT1 i
cross apply
(
    values
    (Item1, Qty1),
    (Item2, Qty2),
    (Item3, Qty3),
    (Item4, Qty4),
    (Item5, Qty5),
    (Item6, Qty6),
    (Item7, Qty7)
) c (Item, Qty);

或者你可以使用CROSS APPLY和SELECT / UNION ALL:

select c.item, c.qty, i.date
from dbo.ITEMREPORT1 i
cross apply
(
    select Item1, Qty1 union all
    select Item2, Qty2 union all
    select Item3, Qty3 union all
    select Item4, Qty4 union all
    select Item5, Qty5 union all
    select Item6, Qty6 union all
    select Item7, Qty7
) c (Item, Qty);

答案 1 :(得分:3)

你想要UNPIVOT。为什么现在每个答案都必须用勺子喂?

select Item, Quantity from
(
  select * from [dbo].[ITEMREPORT1]
  unpivot (
    Item for ItemOriginalColumn in (Item1, Item2, Item3, Item4, Item5, Item6, Item7)
  ) b
  unpivot (
    Quantity for QuantityOriginalColumn in (Qty1, Qty2, Qty3, Qty4, Qty5, Qty6, Qty7)
  ) c
) as d
where 
RIGHT(ItemOriginalColumn,1) = RIGHT(QuantityOriginalColumn, 1)

为了它的价值,我使用了我的答案中的链接,这个链接已经被downvoted /删除,以达到这个解决方案......享受。