2016-09-16 434 views
-2

我在我的SQL查詢中收到以下錯誤。任何人都可以請求幫助:SQL QUERY ERROR;必須是整數

Msg 1060,Level 15,State 1,Line 50 爲TOP或FETCH子句行計數參數提供的行數必須是整數。

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 apply (select top 1 [Hours] AS n 

兩個CROSS APPLY語句。這只是一個語法錯誤。

+0

這不是一個語法錯誤,它是一個數據類型錯誤。它們的語法是有效的,但小時數字不是int。如果將其轉換爲int,則查詢可以正常工作。 http://rextester.com/MDSUL60170。不管它是否具有明智的語義,都不是我曾經費心檢查的東西。 –

+0

對不起。表中的結果需要以小數顯示,而不是INT。是的查詢工作正常,但它不正確計算。 –

+0

例如:450001總時數應該達到51小時,但您的計算顯示爲50小時。 –

相關問題