目前,我在将表格导出到我创建的新表格时面临问题,该表格具有不同的结构。
我有这样的表A:
id curr1 price1 curr2 price2 curr3 price3
a USD 20 USD 10 USD 8
b USD 30 USD 13 USD 11
c USD 10 USD 5 USD 4
我需要得到这样的结果(对不起,我忘了包括名称栏):
a curr1 USD 20
a curr2 USD 10
a curr3 USD 8
b curr1 USD 30
b curr2 USD 13
b curr3 USD 11
c curr1 USD 10
c curr2 USD 5
c curr3 USD 4
知道如何使用查询来实现结果吗?任何帮助都将非常感激。
谢谢你们。
答案 0 :(得分:2)
最简单的方法是使用CROSS APPLY
:
SELECT id, currname, curr, price
FROM [Table]
CROSS APPLY
(
SELECT 'curr1' currname, curr1, price1 UNION ALL
SELECT 'curr2' currname, curr2, price2 UNION ALL
SELECT 'curr3' currname, curr3, price3
) c (currname, curr, price)
或者您可以UNPIVOT
您的数据:
SELECT id, currname, curr, price
FROM
(
SELECT id, curr1, price1, curr2, price2, curr3, price3
FROM [Table]
) t
UNPIVOT
(
curr FOR currname IN (curr1, curr2, curr3)
) c
UNPIVOT
(
price FOR pricename IN (price1, price2, price3)
) p
WHERE RIGHT(currname,1) = RIGHT(pricename,1)
*已编辑包含第二栏
答案 1 :(得分:1)
这样的事情:
select * from
(
select id, 'curr1' as field, curr1 as curr, price1 as price
from tableA
union all
select id, 'curr2', curr2, price2
from tableA
union all
select id, 'curr3', curr3, price3
from tableA
) as T
order by T.id asc, T.field asc
这里我假设您的输出需要您的数据中的某个订单。如果你真的不需要它 - 那么就扔掉它并仅使用内部选择