使用SQL进行表转换

时间:2014-07-14 20:15:23

标签: sql sql-server sql-server-2008

通常,当我处理SQL(很少)时,我一直只使用SELECT * FROM语句。我的主要工作是使用Excel作为分析。但是,我觉得通过编程我的效率可以大大提高,我已经开始学习一些编程(VBA for Excel)。今天我想做一些更有利的事情,试图使用Microsoft SQL转换表,如下图所示。

SELECT Part_Number as [Part Number], SubPart, Quantity FROM....

基本上,零件号可以多达200个,SubPart只有3个类型Sub-I,Sub-II和Sub-III,Quantity可以是任何东西。我需要一些帮助来转换表格,如图所示

enter image description here

2 个答案:

答案 0 :(得分:1)

您似乎需要使用 Pivoting


参考:

Using PIVOT and UNPIVOT

Simple Way To Use Pivot In SQL Query

答案 1 :(得分:1)

将动态T-Sql查询写为:

DECLARE @columns NVARCHAR(MAX)      
       ,@sql NVARCHAR(MAX)

SET @columns = N''
--Get column names for entire pivoting
SELECT @columns += N', ' + QUOTENAME(SpreadCol)
  FROM (select distinct Part_Number as SpreadCol 
        from test
       ) AS T
--select @columns
SET @sql = N'
SELECT SubPart, ' + STUFF(@columns, 1, 2, '') + '
FROM
(select SubPart , Part_Number as SpreadCol ,  Quantity
from test ) as D
PIVOT
(
  sum(Quantity) FOR SpreadCol IN ('
  + STUFF(REPLACE(@columns, ', [', ',['), 1, 1, '')
  + ')
) AS Pivot1
'
--select @sql

EXEC sp_executesql @sql

Check Fiddle Demo here..