2017-11-17 12 views
0
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データ型で動的ピボットを使用する方法は?私は一時テーブルに自分のデータを移動し、行の値を列として動的に表示しようとしました。この問合せは、整数データ型列に対して完全に機能します。しかし、私はキャスト関数とDATEDIFFで試してみましたSQL Serverの時刻データ型を使用した動的ピボット

オペランドのデータ型の時間が

和演算子には無効ですエラーを得たが、それはまた、エラーを投げています。

+0

スレッド[this](https://stackoverflow.com/questions/9725732/how-to-sum-up-time-field-in-sql-server)スレッドをご覧ください。あなたは時間を要約することはできません、どのように "16時30分"は "17時10分"と合計すると思いますか?期待される結果は? –

答えて

0

あなたのデータ型が数値でない場合、あなたは代わりにSUM

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

その働き..ありがとう –

0

MAXまたはMINを使うべきでは以下のことを試してみてください。

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

ありがとうございます。

関連する問題