0
select 
screenname,
count(*) as Total_SignIns
,count(distinct(startdate)) as Uniq_Days_Signin
, ROUND(CONVERT(DECIMAL(4,2), count(*))/CONVERT(DECIMAL(4,2), count(distinct(startdate))), 2) AS AverageDaySingIn
from (
    select distinct(id), x.screenname, startdate, cast(startdate+' '+starttime as datetime) as startdatetime, x.boxadollar
    from sitelive.dbo.exsignin x (nolock)
    inner join (
            select distinct(SenderScreennameSimple), ReceiverScreennameSimple, convert(char(8),dateentered,1) as Poke_date
                ,(select top 1 Dateentered from Temp.dbo.poketemp 
                    where n.ReceiverScreennameSimple = ReceiverScreennameSimple and n.SenderScreennameSimple = SenderScreennameSimple and convert(char(8),n.dateentered,1) = convert(char(8),dateentered,1) 
                    Order by DateEntered) as Poke
                ,(select top 1 Dateentered from Temp.dbo.poketemp 
                    where n.ReceiverScreennameSimple = ReceiverScreennameSimple and n.SenderScreennameSimple = SenderScreennameSimple and convert(char(8),n.dateentered,1) = convert(char(8),dateentered,1) 
                    Order by DateEntered desc) as Poke_Lst
            ,count(*) as Poke_Count
            from Temp.dbo.poketemp n
            Group by SenderScreennameSimple, ReceiverScreennameSimple, convert(char(8),dateentered,1)
            having count(*) = 1
            ) t1 on t1.SenderScreennameSimple = x.screenname
    where datediff(minute,Poke,cast(startdate+' '+starttime as datetime) ) Between 0 and 60 and LiveOrRecorded = 'L'
) t2
Group by  
screenname

上記は、結果セットに使用しているサンプルクエリです。

AverageDaySignIn
1.0000000
1.0000000
1.0000000
1.0000000
1.0000000
2.4500000
2.0000000
1.6700000
1.0000000
1.3300000... and so on

私も試しました:

, ROUND(CONVERT(DECIMAL(3,2), count(*))/CONVERT(DECIMAL(3,2), count(distinct(startdate))), 2) AS AverageDaySingIn

次のエラーが表示されます。

Arithmetic overflow error converting int to data type numeric.

私は何を間違っていますか?初心者で申し訳ありませんが、どんな助けでも大歓迎です。前もって感謝します。

4

2 に答える 2

0

期待どおりに数値が 2 桁に丸められているように見えますが、表示はそうではありません - を使用STRして表示を制御できます。

SELECT
screenname,
COUNT(*) as Total_SignIns
,COUNT(DISTINCT startdate ) as Uniq_Days_Signin
, STR(
    ROUND(COUNT(*)/COUNT(DISTINCT startdate ), 2) 
    , 10, 2) AS AverageDaySingIn
FROM(
...
于 2013-11-06T19:40:05.347 に答える