sql server 中的 PIVOT 概念

Posted

技术标签:

【中文标题】sql server 中的 PIVOT 概念【英文标题】:PIVOT concept in sql server 【发布时间】:2013-06-13 10:45:19 【问题描述】:

我有一个如下所示的存储过程:

ALTER PROC [dbo].[USP_GetDraftQuoteByQuoteID]
(@QuoteID int)
AS 
BEGIN
SELECT cl.Quote_ID,cl.PECCode,lpu.Description,cl.Site_ID,cl.Quantity
FROM ConfigurationList cl
LEFT OUTER JOIN LPU lpu
ON cl.PECCode=lpu.PECCode
WHERE Quote_ID = @QuoteID

我得到如下所示的输出:

Quote   PECCode      Description  Site ID    Quantity
9   NTK539PDE5       OCLD            IND        8
9   NTK525FAE5       NULL            BVT        4
9   NTK531YAE5       NULL            CAX        3
9   NTNM34TB         NULL            IND        5
9   NTK569HA         NULL            COX        8
9   NTNM70ER         NULL            CBA        4
9   CNMT278BR        NULL            IND        4
9   NTRU0411         NULL            BVT        8

但我想得到如下输出:

Quote   PECCode      Description  IND   BVT   CAX   COX   CBA
9   NTK539PDE5       OCLD           8
9   NTK525FAE5       NULL                4
9   NTK531YAE5       NULL                      3
9   NTNM34TB         NULL           5                  
9   NTK569HA         NULL                             8      
9   NTNM70ER         NULL                                   4
9   CNMT278BR        NULL           4      
9   NTRU0411         NULL               8

这里的数量基于 PECCode 和站点。我认为在这里我们必须使用 PIVOT 概念。但我将无法达到预期的效果。任何人都请帮忙。

【问题讨论】:

【参考方案1】:

试试这个:

SELECT QuoteID, PECCode, Desc, 
[IND] as IND_Site, [BVT] as BVT_Site, [CAX] as CAX_Site, [COX] as COX_Site, [CBA] as CBA_Site
FROM
(

SELECT cl.Quote_ID AS QuoteID
,cl.PECCode as PECCode
,lpu.Description as Desc
,cl.Site_ID as SiteID
,cl.Quantity as Quant
FROM ConfigurationList cl
LEFT OUTER JOIN LPU lpu
ON cl.PECCode=lpu.PECCode
WHERE Quote_ID = @QuoteID) T

PIVOT

(
   SUM (Quant)
   FOR
      SiteID IN ([IND], [BVT], [CAX], [COX], [CBA])
) as Pivoted_Table
ORDER BY PECCode

【讨论】:

以上是关于sql server 中的 PIVOT 概念的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 中的 PIVOT SQL 数据

SQL Server 中的 PIVOT 不支持 Select 语句

我可以将 PIVOT 与 Microsoft SQL Server 中的内部联接结合起来吗?

SQL Server - 使用 PIVOT 查询比较 2 个表中的字段

SQL Server基本概念

SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句