使用sql server将单行多列放入一列

时间:2013-08-30 14:03:55

标签: sql sql-server sql-server-2008 tsql

我有这样的表

OrderNo  Item_Description1  Rate1  Quantity1  Item_Description2  Rate2  Quantity2  Item_Description3  Rate3  Quantity3 
-------- ------------------ ------ ---------- ------------------ ------ ---------- ------------------ ------ ----------
1001     Laptop             50000  8          Air Conditioner    20000  10         Television         25000  12
1002     Washing Machine    35000  10         Camera             4000   20         Speaker            1500   15

由此我需要创建一个像这样的临时表或表:

OrderNo  Item_Description   Rate   Quantity 
-------- ------------------ ------ ----------
1001     Laptop             50000  8
         Air Conditioner    20000  10
         Television         25000  12
1002     Washing Machine    35000  10
         Camera             4000   20
         Speaker            1500   15

我有可能在SQL Server中执行此操作吗?

4 个答案:

答案 0 :(得分:7)

您还可以使用CROSS APPLY来取消数据的转移:

select t.order_no,
  c.item_description,
  c.rate,
  c.quantity
from yourtable t
cross apply
(
  select item_description1, rate1, quantity1 union all
  select item_description2, rate2, quantity2 union all
  select item_description3, rate3, quantity3
) c (item_description, rate, quantity)

答案 1 :(得分:2)

 SELECT * FROM 
 (select ORDER_NO,ITEM_DESCRIPTION1,RATE1,QUANTITY1FROM TABLE
 UNION
 select ORDER_NO,ITEM_DESCRIPTION2,RATE2,QUANTITY2 FROM TABLE
 UNION
 select ORDER_NO,ITEM_DESCRIPTION3,RATE3,QUANTITY3 FROM TABLE)AS A ORDER BY ORDER_NO

答案 2 :(得分:1)

试试这个

SELECT t.*
FROM Table1
OUTER APPLY 
(
    VALUES 
        ([OrderNo],item_description1, rate1, quantity1),
        (NULL, item_description2, rate2, quantity2),
        (NULL, item_description3, rate3, quantity3)
) t([OrdNo],item_description, rate, quantity)

SQL FIDDLE DEMO

或者使用带有NULL的@bluefeet回答

SELECT c.[OrderNo],
  c.item_description,
  c.rate,
  c.quantity
FROM Table1 t
CROSS APPLY
(
  SELECT [OrderNo],item_description1, rate1, quantity1   UNION ALL
  SELECT NULL, item_description2, rate2, quantity2   UNION ALL
  SELECT NULL, item_description3, rate3, quantity3
) c ([OrderNo],item_description, rate, quantity)

SQL FIDDLE DEMO

答案 3 :(得分:0)

希望能帮到你!

select t.* from 
 (  
   select order_No, Item_Description1 as Item_Desription, Rate1 as Rate
   from Table
   union 
   select order_No, Item_Description2 as Item_Desription, Rate2 as Rate
   from Table
   union 
   select order_No, Item_Description3 as Item_Desription, Rate3 as Rate
   from Table
) as t
Order by t.order_No asc

这是我的测试

the Table

select t.* from 
  (select id, apple1 as apple, orange1 as orange
  from Test
  union all 
  select id, apple2 as apple, orange2 as orange
  from Test
  union all 
  select id, apple3 as apple, orange3 as orange
  from Test) as t
order by t.id asc

the result