我有一个数据:
DECLARE @RawTable TABLE
(
ID INT NOT NULL
, CarDealer VARCHAR(100)
, id_CarDealer INT
, CityTo VARCHAR(100) NULL
, CityFrom VARCHAR(100) NULL
, Price NUMERIC(18,3) NULL
, CarCount INT
)
INSERT INTO @RawTable
(
ID,
CarDealer,
id_CarDealer,
CityTo,
CityFrom,
Price,
CarCount
)
VALUES
( 1, 'TransLeader', 1, 'New York', 'Los Angeles', 5000, 10)
, ( 2, 'AutoTrader', 2, 'New York', 'Los Angeles', 6000, 11)
, ( 3, 'AO', 3, 'New York', 'Paris', 7000, 20)
, ( 4, 'CarSale', 4, 'Paris', 'London', 4000, 50)
,我希望获得以下期望结果:
请注意,CarDealer
的列表可以多于TransLeader, AutoTrader, AO, CarSale
。这只是我的例子。
我了解我需要使用PIVOT功能。但是不知道该怎么做? 任何帮助将不胜感激。预先感谢。
编辑
很明显,这是一个重复的问题,但是dupe链接没有涵盖某些要求
示例
Declare @SQL varchar(max) = Stuff((Select Distinct ','+QuoteName(CarDealer+' Price')
+','+QuoteName(CarDealer+' Count')
From RawTable
Order By 1
For XML Path('')
),1,1,'')
Select @SQL = '
Select CityTo
,CityFrom
,[TotalCarDealerPrice]
,[TotalCarDealerCount]
,'+@SQL+'
From (
Select A.CityTo
,A.CityFrom
,B.*
From RawTable A
Cross Apply ( values (''TotalCarDealerPrice'',Price)
,(''TotalCarDealerCount'',CarCount)
,(CarDealer+'' Price'' ,Price)
,(CarDealer+'' Count'' ,CarCount)
) B (Item,Value)
) A
Pivot (sum([Value]) For [Item] in ([TotalCarDealerPrice],[TotalCarDealerCount],' + @SQL + ') ) p'
--Print @SQL
Exec(@SQL);
返回