1

我有这个脚本,用于在我的数据透视表的左侧和底部进行总计,我收到了“从字符串转换日期和/或时间时转换失败”的错误。在第 19 行,但代码行与转换无关。个人选择工作正常,但如果他们将是 UNION 他们会得到这个错误。

DECLARE @sizenameS NVARCHAR (MAX)
SELECT @sizenameS = COALESCE(@sizenameS + ', ','') + QUOTENAME(SizeName)
FROM
(   select DISTINCT SIZESET.SizeSetID, SizeName
    from SIZESET
    left join SHIPMENTSIZESET ON SIZESET.SizeSetID = SHIPMENTSIZESET.SizeSetID
    left join SHIPMENTSCHED on SHIPMENTSCHED.ShipmentSchedID = SHIPMENTSIZESET.ShipmentSchedID 
    left join DESIGN on DESIGN.DesignID = SIZESET.DesignID 
    left join ARTICLE on ARTICLE.DesignID = DESIGN.DesignID where ArticleNo = 'EZT02'
)src2
ORDER BY SizeSetID


DECLARE @DownDownDown NVARCHAR (MAX)
SELECT @DownDownDown = COALESCE(@DownDownDown + 'ISNULL([' + CAST (SizeName AS VARCHAR) +'],0) + ', 'ISNULL([' + CAST(SizeName AS VARCHAR)+ '],0) + ')
    FROM
    (   select DISTINCT SIZESET.SizeSetID, SizeName
        from SIZESET
        left join SHIPMENTSIZESET ON SIZESET.SizeSetID = SHIPMENTSIZESET.SizeSetID
        left join SHIPMENTSCHED on SHIPMENTSCHED.ShipmentSchedID = SHIPMENTSIZESET.ShipmentSchedID 
        left join DESIGN on DESIGN.DesignID = SIZESET.DesignID 
        left join ARTICLE on ARTICLE.DesignID = DESIGN.DesignID where ArticleNo = 'EZT02'
    )src3
    ORDER BY SizeSetID
SET @DownDownDown = LEFT (@DownDownDown, LEN (@DownDownDown)-1)

DECLARE @ToTheLeft NVARCHAR(MAX)
SELECT @ToTheLeft = COALESCE(@ToTheLeft + ',ISNULL(SUM([' + CAST(SizeName AS VARCHAR)+']),0)', 'ISNULL(SUM([' + CAST(SizeName AS VARCHAR)+']),0)')
    FROM
    (   select DISTINCT SIZESET.SizeSetID, SizeName
        from SIZESET
        left join SHIPMENTSIZESET ON SIZESET.SizeSetID = SHIPMENTSIZESET.SizeSetID
        left join SHIPMENTSCHED on SHIPMENTSCHED.ShipmentSchedID = SHIPMENTSIZESET.ShipmentSchedID 
        left join DESIGN on DESIGN.DesignID = SIZESET.DesignID 
        left join ARTICLE on ARTICLE.DesignID = DESIGN.DesignID where ArticleNo = 'EZT02'
    )src
    ORDER BY SizeSetID

DECLARE @JerryPogi NVARCHAR (MAX)
SET @JerryPogi =    'SELECT *, ('+ @DownDownDown + ') AS [Grand Total] INTO #Pansamantala
            FROM
            (
                select DISTINCT StartDate, EndDate, SizeName, Quantity
                from SIZESET
                left join SHIPMENTSIZESET ON SIZESET.SizeSetID = SHIPMENTSIZESET.SizeSetID
                left join SHIPMENTSCHED on SHIPMENTSCHED.ShipmentSchedID = SHIPMENTSIZESET.ShipmentSchedID 
                left join DESIGN on DESIGN.DesignID = SIZESET.DesignID 
                left join ARTICLE on ARTICLE.DesignID = DESIGN.DesignID where ArticleNo = ''EZT02''
            ) JerryGwapo
            PIVOT
            (
                SUM(Quantity)
                FOR SizeName
                IN('+@sizenameS +')
            ) JerryHot
            ORDER BY StartDate

            SELECT  *  FROM #Pansamantala
            UNION ALL
            SELECT '''',''Grand Total'','+@ToTheLeft +',  isnull(SUM([Grand Total]),0)  FROM #Pansamantala

            DROP TABLE #Pansamantala'

            exec(@JerryPogi)
4

1 回答 1

2

第二列#Pansamantala是 EndDate,我认为它是一个日期类型。在您的 UNION ALL 中,您将字符串“总计”放入第二列,这不是有效的日期/时间字符串。

要解决此问题,请删除 UNION ALL 后半部分中的“总计”:

SELECT '''','''','+@ToTheLeft +',  isnull(SUM([Grand Total]),0) 
FROM #Pansamantala

或将 UNION ALL 前半部分的日期列转换为字符串:

SELECT CAST(StartDate as varchar), CAST(EndDate as varchar), SizeName, Quantity  
FROM #Pansamantala
于 2014-01-16T02:37:05.973 回答