Codeone
Codeone

Reputation: 1201

SQL PIVOT is not working

Im try to pivot this SQL part but i cant correctly do it, how can i fix it, please help me, Thanks

--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;

full sql part

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

Upvotes: 1

Views: 56

Answers (1)

StackUser
StackUser

Reputation: 5398

Please check the syntax of pivot since you missed the aggregation function.

PIVOT
(
<aggregation function missing>--Please add appropriate aggregate function here.
    FOR IN ([SizeDetailId],[SizeSequenceNo],[SizeId],[SizeName])
) AS opsd;

Your pivot query part would be something like the below.

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;

Upvotes: 3

Related Questions