2017-11-17 16 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

당신은 MAX 또는 MIN 대신 SUM

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

그것의 일 .. 감사합니다 sarslan –

0

는 다음과 같은 시도 사용해야합니다

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

감사합니다.