我有一张这样的表
Saleperson Product1 Product2 saleDate
---------------------------------------------
A 500 300 120217
B 600 200 110217
我想做的是
saleperson newcolumn saledate Sale
--------------------------------------------
A product1 120217 500
A product2 120217 300
B product1 110217 600
B product2 110217 200
我试图使用数据透视表但似乎结果不正确。我坚持使用列名" product1,product2"
CREATE TABLE Sale(
saleperson VARCHAR(02) NOT NULL,
product1 int NOT NULL,
product2 int NOT NULL,
saleDate VARCHAR(10) NOT NULL);
INSERT INTO sale(saleperson,product1,product1,saledate)
VALUES
("A",500,300,"120217"),
("B",600,200,"110217")
答案 0 :(得分:1)
您可以使用unpivot()
。
SELECT *
FROM sale
unpivot (Sale FOR product_code IN (product1, product2));
<强>结果:强>
SALEPERSON SALEDATE PRODUCT_CODE SALE
--------------------------------------------
A 120217 PRODUCT1 500
A 120217 PRODUCT2 300
B 110217 PRODUCT1 600
B 110217 PRODUCT2 200
<强> DEMO 强>
答案 1 :(得分:0)
让我们分别选择product1
和product2
的详细信息。
然后使用UNION ALL
来合并结果。 SQL Fiddle
select Saleperson, 'product1' as newColumn, saledate, Product1 as sale
from saleperson
union all
select Saleperson, 'product2' as newColumn, saledate, Product2 as sale
from saleperson
答案 2 :(得分:0)
试试此链接,这可能会对您有所帮助。这个MS SQL Server建议:
select SALEPERSON,
indicatorname PRODUCT_CODE,
SALEDATE,
indicatorvalue SALE
from Sale
unpivot
(
indicatorvalue
for indicatorname in (product1, product2)
) unpiv;
我刚从上面的链接中得到结果。
SALEPERSON PRODUCT_CODE SALEDATE SALE
A product1 120217 500
A product2 120217 300
B product1 110217 600
B product2 110217 200