SQL PIVOT 不工作
SQL PIVOT is not working
我尝试 旋转 这个 SQL 部分,但我无法正确地做到这一点,我该如何修复它,
请帮我,
谢谢
--SizeBreakDown
SELECT OPSD.SizeDetailId AS 'SizeDetailId',
OPSD.SizeSequenceNo AS 'SizeNo',
OPSD.SizeId AS 'SizeId',
SZ.SizeName AS 'SizeName',
OPSD.Quanity AS 'Quanity'
FROM OrderPlacementSizeBreakDown AS OPSD
INNER JOIN Sizes AS SZ ON OPSD.SizeId = SZ.SizeId
PIVOT
(
FOR IN ([SizeDetailId],[SizeSequenceNo],[SizeId],[SizeName])
) AS opsd;
全部sql部分
ALTER PROCEDURE [dbo].[OrderPlacement_GetForUpdate]
@OrderPlacementId int
AS
BEGIN
--Header
SELECT OP.OrderPlacementNo AS 'OrderPlacementNo',
CONVERT(varchar,OP.OrderPlacementDate,103) AS 'OrderPlacementDate',
ST.StyleId AS 'StyleId',
IH.InquiryOrderId AS 'InquiryOrderId',
OI.OrderInquiryId AS 'OrderInquiryId',
IH.InquiryOrderNo AS 'InquiryOrderNo',
ST.StyleName AS 'StyleName',
CS.CustomerName AS 'CustomerName',
BYR.BuyerName AS 'BuyerName',
GT.GarmentTypeName AS 'GarmentTypeName',
PC.ToBeQuotePrice AS 'ToBeQuotePrice',
OP.POQuantity AS 'POQuantity',
OP.PONo AS 'PONo',
OP.CustomerMerchant AS 'CustomerMerchant',
pc.PreCostingId AS 'PreCostingId',
PC.PrecostingNo AS 'PrecostingNo',
OICP.Value AS 'Value',
OP.Remarks AS 'Remarks',
OP.ConfirmStatus AS 'ConfirmStatus'
FROM OrderPlacement AS OP
INNER JOIN Styles AS ST ON OP.StyleId = ST.StyleId
INNER JOIN InquiryHeaders AS IH ON OP.InquiryHeaderId = IH.InquiryOrderId
INNER JOIN OrderInquiryHeader AS OI ON OP.OrderInquiryId = OI.OrderInquiryId --AND OI.StatusId = 8
INNER JOIN PreCostingHeader AS PC ON OP.PreCostingId = PC.PreCostingId --AND PC.StatusId = 8
INNER JOIN Customers AS CS ON ST.CustomerId = CS.CustomerId
INNER JOIN Buyers AS BYR ON ST.BuyerId = BYR.BuyerId
INNER JOIN GarmentTypes AS GT ON ST.GarmentTypeID = GT.GarmentTypeID
INNER JOIN OrderInquiryCriticalPathDetail AS OICP ON OI.OrderInquiryId = OICP.OrderInquiryId
INNER JOIN OrderInquiryCriticalPathTemplateDetail AS OICPT ON OICP.OrderInquiryCriticalPathTemplateDetailId = OICPT.OrderInquiryCriticalPathTemplateDetailId AND OICPT.OrderInquiryCriticalPathTemplateDetailId = 1 --Id of Lab dip approved Date in OrderInquiryCriticalPathTemplateDetail
WHERE OP.OrderPlacementId = @OrderPlacementId
--GarmentDetail
SELECT OPGD.GarmentDetailId AS 'GarmentDetailId',
OPGD.StyleDetailId AS 'StyleDetailId',
OPGD.ComponentId AS 'ComponentId',
CMP.ComponentName AS 'ComponentName',
STD.NoOfParts AS 'NoOfParts',
OPGD.ColourId AS 'ColourId'
FROM OrderPlacementGarmentDetail AS OPGD
INNER JOIN StyleDetails AS STD ON OPGD.StyleDetailId = STD.StyleDetailId
INNER JOIN Components AS CMP ON OPGD.ComponentId = CMP.ComponentId
WHERE OPGD.OrderPlacementId = @OrderPlacementId
--SizeBreakDown
SELECT OPSD.SizeDetailId AS 'SizeDetailId',
OPSD.SizeSequenceNo AS 'SizeNo',
OPSD.SizeId AS 'SizeId',
SZ.SizeName AS 'SizeName',
OPSD.Quanity AS 'Quanity'
FROM OrderPlacementSizeBreakDown AS OPSD
INNER JOIN Sizes AS SZ ON OPSD.SizeId = SZ.SizeId
WHERE OPSD.OrderPlacementId = 1014
END
请检查 pivot 的语法,因为你错过了聚合函数。
PIVOT
(
<aggregation function missing>--Please add appropriate aggregate function here.
FOR IN ([SizeDetailId],[SizeSequenceNo],[SizeId],[SizeName])
) AS opsd;
您的数据透视查询部分如下所示。
SELECT *
FROM (
SELECT OPSD.SizeDetailId AS 'SizeDetailId'
,OPSD.SizeSequenceNo AS 'SizeNo'
,OPSD.SizeId AS 'SizeId'
,SZ.SizeName AS 'SizeName'
,OPSD.Quanity AS 'Quanity'
FROM OrderPlacementSizeBreakDown AS OPSD
INNER JOIN Sizes AS SZ ON OPSD.SizeId = SZ.SizeId
) t
PIVOT(Max(ColumnName) FOR IN (
[SizeDetailId]
,[SizeSequenceNo]
,[SizeId]
,[SizeName]
)) AS opsd;
我尝试 旋转 这个 SQL 部分,但我无法正确地做到这一点,我该如何修复它, 请帮我, 谢谢
--SizeBreakDown
SELECT OPSD.SizeDetailId AS 'SizeDetailId',
OPSD.SizeSequenceNo AS 'SizeNo',
OPSD.SizeId AS 'SizeId',
SZ.SizeName AS 'SizeName',
OPSD.Quanity AS 'Quanity'
FROM OrderPlacementSizeBreakDown AS OPSD
INNER JOIN Sizes AS SZ ON OPSD.SizeId = SZ.SizeId
PIVOT
(
FOR IN ([SizeDetailId],[SizeSequenceNo],[SizeId],[SizeName])
) AS opsd;
全部sql部分
ALTER PROCEDURE [dbo].[OrderPlacement_GetForUpdate]
@OrderPlacementId int
AS
BEGIN
--Header
SELECT OP.OrderPlacementNo AS 'OrderPlacementNo',
CONVERT(varchar,OP.OrderPlacementDate,103) AS 'OrderPlacementDate',
ST.StyleId AS 'StyleId',
IH.InquiryOrderId AS 'InquiryOrderId',
OI.OrderInquiryId AS 'OrderInquiryId',
IH.InquiryOrderNo AS 'InquiryOrderNo',
ST.StyleName AS 'StyleName',
CS.CustomerName AS 'CustomerName',
BYR.BuyerName AS 'BuyerName',
GT.GarmentTypeName AS 'GarmentTypeName',
PC.ToBeQuotePrice AS 'ToBeQuotePrice',
OP.POQuantity AS 'POQuantity',
OP.PONo AS 'PONo',
OP.CustomerMerchant AS 'CustomerMerchant',
pc.PreCostingId AS 'PreCostingId',
PC.PrecostingNo AS 'PrecostingNo',
OICP.Value AS 'Value',
OP.Remarks AS 'Remarks',
OP.ConfirmStatus AS 'ConfirmStatus'
FROM OrderPlacement AS OP
INNER JOIN Styles AS ST ON OP.StyleId = ST.StyleId
INNER JOIN InquiryHeaders AS IH ON OP.InquiryHeaderId = IH.InquiryOrderId
INNER JOIN OrderInquiryHeader AS OI ON OP.OrderInquiryId = OI.OrderInquiryId --AND OI.StatusId = 8
INNER JOIN PreCostingHeader AS PC ON OP.PreCostingId = PC.PreCostingId --AND PC.StatusId = 8
INNER JOIN Customers AS CS ON ST.CustomerId = CS.CustomerId
INNER JOIN Buyers AS BYR ON ST.BuyerId = BYR.BuyerId
INNER JOIN GarmentTypes AS GT ON ST.GarmentTypeID = GT.GarmentTypeID
INNER JOIN OrderInquiryCriticalPathDetail AS OICP ON OI.OrderInquiryId = OICP.OrderInquiryId
INNER JOIN OrderInquiryCriticalPathTemplateDetail AS OICPT ON OICP.OrderInquiryCriticalPathTemplateDetailId = OICPT.OrderInquiryCriticalPathTemplateDetailId AND OICPT.OrderInquiryCriticalPathTemplateDetailId = 1 --Id of Lab dip approved Date in OrderInquiryCriticalPathTemplateDetail
WHERE OP.OrderPlacementId = @OrderPlacementId
--GarmentDetail
SELECT OPGD.GarmentDetailId AS 'GarmentDetailId',
OPGD.StyleDetailId AS 'StyleDetailId',
OPGD.ComponentId AS 'ComponentId',
CMP.ComponentName AS 'ComponentName',
STD.NoOfParts AS 'NoOfParts',
OPGD.ColourId AS 'ColourId'
FROM OrderPlacementGarmentDetail AS OPGD
INNER JOIN StyleDetails AS STD ON OPGD.StyleDetailId = STD.StyleDetailId
INNER JOIN Components AS CMP ON OPGD.ComponentId = CMP.ComponentId
WHERE OPGD.OrderPlacementId = @OrderPlacementId
--SizeBreakDown
SELECT OPSD.SizeDetailId AS 'SizeDetailId',
OPSD.SizeSequenceNo AS 'SizeNo',
OPSD.SizeId AS 'SizeId',
SZ.SizeName AS 'SizeName',
OPSD.Quanity AS 'Quanity'
FROM OrderPlacementSizeBreakDown AS OPSD
INNER JOIN Sizes AS SZ ON OPSD.SizeId = SZ.SizeId
WHERE OPSD.OrderPlacementId = 1014
END
请检查 pivot 的语法,因为你错过了聚合函数。
PIVOT
(
<aggregation function missing>--Please add appropriate aggregate function here.
FOR IN ([SizeDetailId],[SizeSequenceNo],[SizeId],[SizeName])
) AS opsd;
您的数据透视查询部分如下所示。
SELECT *
FROM (
SELECT OPSD.SizeDetailId AS 'SizeDetailId'
,OPSD.SizeSequenceNo AS 'SizeNo'
,OPSD.SizeId AS 'SizeId'
,SZ.SizeName AS 'SizeName'
,OPSD.Quanity AS 'Quanity'
FROM OrderPlacementSizeBreakDown AS OPSD
INNER JOIN Sizes AS SZ ON OPSD.SizeId = SZ.SizeId
) t
PIVOT(Max(ColumnName) FOR IN (
[SizeDetailId]
,[SizeSequenceNo]
,[SizeId]
,[SizeName]
)) AS opsd;