我需要將行中的數據旋轉/旋轉到列中 - 但與我見過的大多數示例有點不同。SQL Server高級Pivot將行分組爲列
我們有顧客會買東西(想想披薩配料賣家......人們總是會買奶酪,麪糰和醬汁;有些人可能會購買配料,但我們不關心)。
我需要做的是按訂單日期對列數據進行排序。下面是兩個腳本來填補溫度輸入和溫度輸出表,以顯示我想要實現的目標。
SQL Server 2008的
CREATE table #myInput
(CustomerID Varchar(10), OrderDate varchar(10), Item varchar(13), ItemColor varchar(20));
CREATE table #myOUTPUT
(
CustomerID Varchar(10),
OrderDate_1 varchar(10),
PartA_1 varchar(20),
PartB_1 varchar(20),
PartC_1 varchar(20),
OrderDate_2 varchar(10),
PartA_2 varchar(20),
PartB_2 varchar(20),
PartC_2 varchar(20),
OrderDate_3 varchar(10),
PartA_3 varchar(20),
PartB_3 varchar(20),
PartC_3 varchar(20)
)
INSERT INTO #myInput
(CustomerID, OrderDate, Item, ItemColor)
VALUES
('abc','5/1/2001','PartA','Silver'),
('abc','5/1/2001','PartB','Red'),
('abc','5/1/2001','PartC','Green'),
('abc','5/20/2002','PartA','Purple'),
('abc','5/20/2002','PartB','Yellow'),
('abc','5/20/2002','PartC','Black'),
('abc','10/1/2002','PartA','Red'),
('abc','10/1/2002','PartB','Silver'),
('abc','10/1/2002','PartC','Blue'),
('def','4/1/2000','PartA','Green'),
('def','4/1/2000','PartB','Red'),
('def','4/1/2000','PartC','White'),
('jkl','5/1/2001','PartA','Black'),
('jkl','5/1/2001','PartB','Yellow'),
('jkl','5/1/2001','PartC','Silver'),
('jkl','10/10/2001','PartA','Green'),
('jkl','10/10/2001','PartB','Black'),
('jkl','10/10/2001','PartC','Silver')
;
而結果:
insert into #myOUTPUT
(客戶ID,OrderDate_1,PartA_1,PartB_1,PartC_1,OrderDate_2,PartA_2,PartB_2,PartC_2,OrderDate_3,PartA_3,PartB_3, PartC_3)
VALUES
('abc','5/1/2001','Silver','Red','Green','5/20/2002','Purple','Yellow','Black','10/1/2002','Red','Silver','Blue'),
('def','4/1/2000','Green','Red','White','','','','','','','',''),
('jkl','5/1/2001','Black','Yellow','Silver','10/10/2001','Green','Black','Silver','','','','');
select * from #myInput
select * from #myOUTPUT
我們正在尋找17個或更少的訂單。至少在目前的時刻,我們沒有超過一打訂單的任何一個客戶。
我試過了幾個不同的東西 - 樞軸似乎並沒有產生我期待的輸出。我想可能是dense_rank來決定首先需要多少列,然後通過cte插入到光標句柄中?但我無法獲得所需的輸出。請注意,源「日期」字段以varchar形式存儲在數據庫中。此外,沒有訂單號碼 - 所以不公平僅僅來自客戶ID和日期。
感謝這似乎工作。我刪除了部件號字符串中的下劃線,並且必須爲#myinput表創建別名,但在此之後,您的查詢正在我的測試數據集上生成期望的輸出。努力把這個放到我的實際集合中。 – WendyKinect
已確認 - 只是將其與實際數據集進行對比,輸出完全符合要求。再一次,謝謝你! – WendyKinect