【问题标题】:Table Transform with SQL使用 SQL 进行表转换
【发布时间】:2014-07-14 20:15:23
【问题描述】:

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

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

基本上Part Number最多可以有200个,SubPart只有Sub-I、Sub-II、Sub-III 3种,数量可以任意。我需要一些帮助来转换表格,如图所示

【问题讨论】:

  • 您需要更新第二个(转换后的)表上的标题吗?否则我不明白。
  • @Dave.Gugg,我更新了很抱歉错过了它

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


【解决方案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..

【讨论】:

  • 非常感谢。我刚刚通过 Fiddle Demo 测试了 SQL,效果很好。我将尝试扩展语法以适应我的问题,该问题更复杂但相似。
【解决方案2】:

看来你需要使用Pivoting


参考:

Using PIVOT and UNPIVOT

Simple Way To Use Pivot In SQL Query

【讨论】:

  • 感谢链接,我现在基本明白了。但是,问题是:(1)如果我不知道零件号(2)有多少零件号
  • @user2103670 使用动态旋转
猜你喜欢
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2021-01-04
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多