SQL Server 将行数据转换为列标题

Posted

技术标签:

【中文标题】SQL Server 将行数据转换为列标题【英文标题】:SQL server convert a row data to column headers 【发布时间】:2013-10-21 15:06:46 【问题描述】:

我使用的是 SQL Server 2008

我有一个结果1

ProductCode    ApprovedQuantity productlineid
----------------------------------------
599-128-001     1              1
599-129-001     0              1

结果集 2

productlineid  Damage
------------------------------
   1           MissingCriticalComponents
   1           BrokenConnector/Clip

我想从下面的两个 select 语句中加入上述两个结果集

 ProductCode    ApprovedQuantity   MissingCriticalComponents BrokenConnector/Clip
-----------------------------------------------------------------------------------
599-128-001     7
599-129-001     5

结果集 2 值是动态的(即损坏类型不固定。它会有所不同。) 我想将结果集 2 行值添加为列值,结果集 1 具有空/空行值。

我可以将两个 select 语句合二为一,结果集如下所示

 ProductCode    ApprovedQuantity     Damage
--------------------------------------------------------    
599-128-001     7       Broken Connector/Clip
599-129-001     5       Broken Connector/Clip
599-128-001     7       Missing Critical Components
599-129-001     5       Missing Critical Components

请提供您的意见

更新:

这是针对零售产品采购订单的。PFB 是我的 Requirement 的简化版本。我有一个 productLine 表、Product 表、purchare order 表和damagetype 表。

产品线表

 Productlineid       productlinename
-------------------------------------
     1                   xx
     2                   yy

产品表

   ProductCode    Productlineid     .....
-----------------------------------------------------------------------------------
599-128-001     1
599-129-001     1
599-128-002     2
599-129-002     2

伤害表

productlineid  Damage
------------------------------
  1           MissingCriticalComponents
  1           BrokenConnector/Clip
  2           water damaged
  2           brokenLens

订单明细表

  ProductCode    ApprovedQuantity     OrderID
--------------------------------------------------------    
599-128-001     7       101
599-129-001     5       101
599-128-001     7       102
599-129-001     5       102

用户界面:有一个带有导出到 excel 选项/网格视图的订单管理屏幕

使用 Order id 作为输入,我需要将订单详细信息连同其损坏类型作为具有空行值的新列来获取。通过 Excel 或网格,他们将更新每个订单的损坏单元。

我的目标是得到如下所示的结果集

 ProductCode    ApprovedQuantity   MissingCriticalComponents BrokenConnector/Clip
-----------------------------------------------------------------------------------
599-128-001     7
599-129-001     5

【问题讨论】:

感谢您的评论。我已按问题更新。 您能否向我们提供您对结果 1 和 2 的请求?目前还不清楚。在表 2 中,有一个列损坏,带有值,而在表 3 中,损坏的值现在是列?。您能否向我们提供您用于请求的表格描述?缺少一张桌子? 新的列标题下应该有什么?您想要新列下的数量总和吗?想要的结果有点混乱。 我需要将订单详细信息连同其损坏类型作为具有空行值的新列来获取。请找到我的更新 【参考方案1】:

您只想要一个 SELECT QUERY,它会给您显示的第三个表格,对吗?

假设,您的两个结果是单个表上的两个选择...

SELECT T1.productCode, T1.ApprovedQuantity, T2.Damage
FROM TABLE1 T1
LEFT JOIN TABLE2 T2 ON T2.productlineid  = T1.productlineid  

这是你想要的吗?

【讨论】:

感谢您的回复。请在我的更新中找到更多详细信息。

以上是关于SQL Server 将行数据转换为列标题的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 R2,将列转换为行,将行转换为列[重复]

在 SQL Server 视图中有效地将行转换为列

如何在 SQL Server 中将行动态转换为列

MS Access SQL 将行转换为列

带有条件的 Oracle SQL Pivot 将行转换为列

在 SQL 中使用“Pivot”将行转换为列