2014-01-16 26 views
1

我有這個腳本在我的透視表的左側和底部有總計, 我有'從字符串轉換日期和/或時間時轉換失敗' 。在第19行,但是這行代碼與轉換無關。 個人選擇工作正常,但如果他們將是聯盟他們得到這個錯誤。從字符串中轉換日期和/或時間時轉換失敗。當在sql server中使用union all時

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('[email protected] +') 
      ) JerryHot 
      ORDER BY StartDate 

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

      DROP TABLE #Pansamantala' 

      exec(@JerryPogi) 

回答

2

#Pansamantala的第二列是EndDate,我認爲它是日期類型。在您的UNION ALL中,您將字符串'Grand Total'放入第二列,這不是有效的日期/時間字符串。

要解決這個問題,無論是在你的UNION ALL下半年刪除「總計」:

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

或在您的UNION上半年投的日期列的所有以字符串:

SELECT CAST(StartDate as varchar), CAST(EndDate as varchar), SizeName, Quantity 
FROM #Pansamantala 
+0

是的,這是我最近發現的。謝謝順便說一句,我應該投出開始日期和結束日期? – Dave

+0

我不確定你的意思。第一列是好的,所以如果你保留第二列而不是'總共',那麼你的腳本應該工作。你是這個意思嗎? – rikitikitik

+0

是多數民衆贊成在我什麼是我的朋友,我現在的問題是,我不能將兩個日期時間列轉換爲varchar,以便它不會影響「總計專欄」 – Dave

相關問題