簡體   English   中英

SQL Server 中具有時間數據類型的動態數據透視表

[英]Dynamic pivot with time datatype in SQL Server

SELECT 
    PARTNO, BATCHNO, ' +   @IdleHoursColumns + '                              
INTO 
    TEMPTABLE_IH                            
FROM 
    [dbo].[PRODUCTION_IH]                               
PIVOT
    (SUM(IDLETIME))                              
          FOR REASON IN (' + @IdleHoursColumns + ')) AS P' 

--printed query 
SELECT 
    PARTNO, BATCHNO, [POWERCUT]                              
INTO 
    TEMPTABLE_IH                            
FROM 
    [dbo].[PRODUCTION_IH]                               
PIVOT
    (SUM(IDLETIME)                     
          FOR REASON IN ([POWERCUT])) AS P

如何在 SQL Server 中使用具有time數據類型的動態數據透視表? 我試圖將我的數據移動到一個臨時表中,並將行值動態顯示為列。 該查詢非常適用於整數數據類型列。 但我有一個錯誤

操作數數據類型時間對求和運算符無效

我嘗試使用 cast 函數和 Datediff 但它也拋出錯誤。

如果您的數據類型不是數字,那么您應該使用MAXMIN而不是SUM

SELECT PARTNO,BATCHNO, ' +   @IdleHoursColumns + '                              
INTO TEMPTABLE_IH                            
FROM [dbo].[PRODUCTION_IH]                               
PIVOT( MAX(IDLETIME))                              
      FOR REASON IN (' + @IdleHoursColumns + ')) AS P' 

請嘗試以下操作:

SELECT T1.PARTNO, T1.BATCHNO, T2.[POWERCUT] FROM (
SELECT PARTNO,BATCHNO,[POWERCUT]                              
    --INTO TEMPTABLE_IH                            
    FROM [DBO].[PRODUCTION_IH]                               
    PIVOT(MAX(IDLETIME)
          FOR REASON IN ([POWERCUT])) AS P)T1
    JOIN
    (
    SELECT PARTNO,BATCHNO, SUM(DATEDIFF(MINUTE, 0, IDLETIME)) / 60.0 AS [POWERCUT]
    FROM [DBO].[PRODUCTION_IH] 
    GROUP BY PARTNO,BATCHNO
    ) T2
ON T1.PARTNO = T2.PARTNO AND T1.BATCHNO = T2.BATCHNO

它將為您提供以小時為單位的總時間。 您可以修改它以包含所有“原因”列。

HTH

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM