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 中的内部联接结合起来吗?