2016-09-16 5 views
-2

SQLクエリで次のエラーが発生します。誰でも助けてください:SQLクエリエラー。 INTEGERでなければなりません

メッセージ1060、レベル15、状態1、行50 TOP句またはFETCH句の行数パラメータに指定する行数は整数でなければなりません。両方CROSSで

cross apply (select top 1 [Hours] AS n 

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 

は文を適用します。それは単なる構文エラーです。

+0

構文エラーではなく、データ型エラーです。それらの構文は有効ですが、時間はintではなく数値です。それがintにキャストされていれば、クエリは正常に動作します。 http://rextester.com/MDSUL60170。それが合理的なセマンティクスを持っているかどうかは私がチェックするのに気をつけたものではありません。 –

+0

申し訳ありません。表の結果はINTではなく、小数点で表示する必要があります。はい、クエリは正常に動作しますが、正しく計算されません。 –

+0

例:450001の合計時間は51時間になりますが、計算には50時間が表示されます。 –

関連する問題