2016-09-16 2 views
-2

SQL 쿼리에서 다음 오류가 발생합니다. 아무도 도와 줄 수 없습니까?SQL 쿼리 오류; 정수 여야합니다

msg1060, 수준 15, 상태 1, 줄 50 TOP 또는 FETCH 절에 제공된 행 수 row count 매개 변수는 정수 여야합니다.

with 
-- sample data 
Tbl_PCode as (
select * 
from (values 
     (450001,cast('8/1/2016' as date), 'REG', 40.50, 1), 
     (450001,cast('8/1/2016' as date), 'OT', 10.50, 2), 

     (450002,cast('8/2/2016' as date), 'REG', 29.50, 3),          

     (450003,cast('8/3/2016' as date), 'REG', 32.50, 4), 
     (450003,cast('8/3/2016' as date), 'VACC', 8.50, 5), 

     (450004,cast('8/3/2016' as date), 'VACC', 8.50, 6), 

     (450005,cast('8/3/2016' as date), 'VACC', 35.50,7) 

     ) t(ID,Date,PCode,Hours,pos) 
), 
Tbl_TCode as (
select * 
from (values 
     (450001,cast('8/1/2016' as date), 'SHOPC', 10.50, 1), 
     (450001,cast('8/1/2016' as date), 'FIELDC', 30.50, 2), 
     (450001,cast('8/1/2016' as date), 'SHOPC', 2.00, 3), 
     (450001,cast('8/1/2016' as date), 'FIELDC', 8.00, 4), 

     (450002,cast('8/2/2016' as date), 'SHOPC', 2.00, 5), 
     (450002,cast('8/2/2016' as date), 'FIELDC', 27.50, 6), 

     (450003,cast('8/3/2016' as date), 'SHOPC', 20.50, 7), 
     (450003,cast('8/3/2016' as date), 'FIELDC', 12.50, 8), 
     (450003,cast('8/3/2016' as date), 'SHOPC', 8.00, 9), 
     (450003,cast('8/3/2016' as date), 'FIELDC', 0.00, 10), 

     (450004,cast('8/3/2016' as date), 'SHOPC', 8.50, 11), 

     (450005,cast('8/3/2016' as date), 'SHOPC', 35.50, 12) 

     ) t(ID,Date,TCode,Hours,pos) 
), 
tally as ( 
select top(500000) rn= row_number() over(order by (select null)) 
from sys.all_objects 
), 
-- query 
t_P as (
select *, rn=row_number() over(partition by ID,Date order by pos) 
from Tbl_PCode 
cross apply (select top(Hours) 1 n 
      from tally 
      ) x 
), 
t_T as (
select *, rn=row_number() over(partition by ID,Date order by pos) 
from Tbl_TCode 
cross apply (select top(Hours) 1 n 
      from tally 
      ) x 
) 
select t_P.ID as PersonNum, t_P.Date, t_P.PCode as PayCode, 
count(*) as Hours, t_T.TCode as TransferCode 
from t_P 
join t_T on t_P.ID=t_T.ID and t_P.Date=t_T.Date and t_P.rn=t_T.rn 
group by t_P.ID, t_P.Date, t_P.PCode, t_T.TCode 
order by t_P.id asc 
+6

무엇을하고 있을까요?'select top (Hours) 1 n'? –

답변

4

변경

cross apply (select top(Hours) 1 n 

모두 CROSS에서

cross apply (select top 1 [Hours] AS n 

에이 문을 적용합니다. 그것은 단지 구문 오류 일뿐입니다.

+0

구문 오류가 아니므로 데이터 유형 오류입니다. 그들이 가지고있는 구문은 유효하지만 시간은 int가 아닌 숫자입니다. 쿼리가 int로 캐스트되면 쿼리가 올바르게 작동합니다. http://rextester.com/MDSUL60170. 의미있는 의미를 지녔는 지 여부는 내가 확인하기가 힘든 일이 아닙니다. –

+0

죄송합니다. 표의 결과는 INT가 아닌 소수에 표시해야합니다. 예 쿼리는 올바르게 작동하지만 올바르게 계산되지 않습니다. –

+0

예 : 450001 총 시간은 51 시간이지만 계산은 50 시간을 나타냅니다. –

관련 문제