0

2 つのサブクエリからカウントを取得している次のクエリがあり、両方のカウントの平均が得られるはずです。最後のクエリで C1 にエラーが発生しています。

Select c0.hour , AVG(c0.frequency)as 'AVG In', AVG(c1.frequency)as 'AVG Out' from
(SELECT  [Network]
,cast ([date time]as date)as 'date'
,datepart(hh,[date time])as 'hour'
,[Scan Type]
,count ([scan type])as frequency    
 FROM [Pallex-DW].[dbo].[Scans]
 where Network like 'fr'and [Scan Type] like '3'
 group by Network ,datepart(hh,[date time]),cast ([date time]as date),[Scan Type])as c0

 Union  

 (SELECT  [Network]
,cast ([date time]as date)as 'date'
,datepart(hh,[date time])as 'hour'
,[Scan Type]
,count ([scan type])as frequency
 FROM [Pallex-DW].[dbo].[Scans] as c1
 where Network like 'fr'and [Scan Type] like '11'
 group by Network ,datepart(hh,[date time]),cast ([date time]as date),[Scan Type])c1
4

2 に答える 2

1

あなたのクエリの問題は実際にはc0. ユニオンは、最初のクエリでエイリアスを必要としません。

このバージョンを試してください:

Select
c0.hour,AVG(c0.frequency)as 'AVG In',AVG(c1.frequency)as 'AVG Out'
from
((SELECT  [Network]
    ,cast ([date time]as date)as 'date'
    ,datepart(hh,[date time])as 'hour'
    ,[Scan Type]
    ,count ([scan type])as frequency
  FROM [Pallex-DW].[dbo].[Scans]
  where Network like 'fr'and [Scan Type] like '3'
  group by Network ,datepart(hh,[date time]),cast ([date time]as date),[Scan Type])
  Union  
(SELECT  [Network]
    ,cast ([date time]as date)as 'date'
    ,datepart(hh,[date time])as 'hour'
    ,[Scan Type]
    ,count ([scan type])as frequency
  FROM [Pallex-DW].[dbo].[Scans] as c1
  where Network like 'fr'and [Scan Type] like '11'
  group by Network ,datepart(hh,[date time]),cast ([date time]as date),[Scan Type])) as c

unionしかし、 1 つのサブクエリですべての行を削除して選択することで、クエリを大幅に簡素化できると思います。

Select c.hour, AVG(case when [scan type] = '3' then 1.0*c.frequency end) as "AVG In",
       AVG(case when [scan type] = '3' then 1.0*c.frequency end) as "AVG Out"
from ((SELECT  [Network], 
               cast([date time]as date)as "date", 
               datepart(hh,[date time])as "hour",
               [Scan Type],
               count ([scan type])as frequency
       FROM [Pallex-DW].[dbo].[Scans]
       where Network like 'fr'and [Scan Type] in ( '3', '11')
       group by Network ,datepart(hh,[date time]),cast ([date time]as date),[Scan Type]
      ) as c
group by hour

group by最終結果の句も必要です。また、値に 1.0 を掛けて、整数以外の値に変換しました。整数の平均は整数であり、誤解を招く可能性があります。また、列名を囲む一重引用符も削除しました。二重引用符または角括弧を使用します (実際の定数との混同を避けるため)。

于 2013-06-21T13:46:38.807 に答える