在很多情況下需要查詢出來的數據進行行轉列,看如下的例子,#t是一個臨時表,可以換成真實存在的表:
--頭部信息,這部分不參與行轉列
DECLARE @SqlText NVARCHAR(4000)='SELECT DeviceName 貨機名稱, DeviceAddress 貨機地址,CONVERT(VARCHAR(10), ReplenishmentCreatedDate, 20) 時間, ' -- SQL頭部分 SELECT
--行轉列如下:可以重命名字段名,列頭用其中一個列生成,列信息用另一個字段的信息,可以讓多列數據信息轉換 SELECT @SqlText = @SqlText + ' SUM(CASE WHEN GoodsName=''' + GoodsName + ''' THEN ISNULL(ReplenishmentTotalQuantity, 0) END) ''' + GoodsName + '(上貨[件])'',' + ' SUM(CASE WHEN GoodsName=''' + GoodsName + ''' THEN ISNULL(PickUpTotalQuantity,0) END) ''' + GoodsName + '(下貨[件])'',' FROM (SELECT DISTINCT GoodsName FROM #t) T -- 拼接CASE WHEN SELECT @SqlText = LEFT(@SqlText, Len(@SqlText)-1) + ' FROM #t GROUP BY DeviceName, DeviceAddress,CONVERT(VARCHAR(10), ReplenishmentCreatedDate, 20)' -- 拼接 FROM后面部分 PRINT @SqlText EXEC (@SqlText)