2016-07-26 10 views
0

caseの出現を合計したいと思います。case文で和を使用しようとしましたが、このエラーが発生しました。どのように解決できますか?max/min関数のcase文でsumを使用できますか?

Msg 130, Level 15, State 1, Line 3 
Cannot perform an aggregate function on an expression containing an aggregate or a subquery. 

私のコード例:

select 
sum(case when cast(max(ptl.RowDate)as int) = cast(Min(ptl.RowDate) as int) then 1 else 0 end) 
,DATEPART(WEEK, rowdate) week_ 
from m.dbo.tblLog ptl (nolock) 
where rowdate > GETDATE()-91 
group by DATEPART(WEEK, rowdate) 

更新: コメントに基づいて:だけonce.Iは毎週に基づいてカウントを取得したいと思い、私は、Webページを訪問した明確なユーザをカウントしたいです時間枠。

+0

あなたはそれをすることはできません。あなたは再び考えて、あなたのロジックを変える必要があります。あなたが達成したいことを言及してください。 –

+0

その総額はどんなものでしょうか? 1週間に1つの行だけがあり、その合計はいずれにしても1または0になります。 –

+0

サンプルデータと望ましい結果を提供してください。動作していないクエリは、本当にやりたいことを伝えません。 –

答えて

1

集計関数を別の集計関数内で使用することはできません。

select (case when cast(max(ptl.RowDate)as int) = cast(Min(ptl.RowDate) as int) 
      then 1 else 0 
     end) as OneValueFlag, 
     DATEPART(WEEK, rowdate) as week_ 
from m.dbo.tblLog ptl (nolock) 
where rowdate > GETDATE() - 91 
group by DATEPART(WEEK, rowdate); 

:あなただけのフラグをしたい場合は、なぜあなたはsum()を望む

SELECT SUM(something) as s, 
     week_ 
FROM (
    select case when cast(max(ptl.RowDate)as int) = cast(Min(ptl.RowDate) as int) then 1 else 0 end as something, 
      DATEPART(WEEK, rowdate) week_ 
    from m.dbo.tblLog ptl (nolock) 
    where rowdate > GETDATE()-91 
    group by DATEPART(WEEK, rowdate) 
    ) as res 
GROUP BY week_ 
1

別の方法あなたのクエリ

SELECT SUM(CASE WHEN CAST(MaxRowDate AS INT) = cast(MinRowDate AS INT) THEN 1 ELSE 0 END) 
week_ 
FROM 
(

    SELECT MAX(ptl.RowDate) MaxRowDate,MIN(ptl.RowDate) MinRowDate,DATEPART(WEEK, rowdate) week_ 
    FROM m.dbo.tblLog ptl (NOLOCK) 
    WHERE rowdate > GETDATE()-91 
    GROUP BY DATEPART(WEEK, rowdate) 
)M 
GROUP BY week_ 
1

に:あなたは、サブクエリまたはCTEを使用する必要があります値が日付に変換される理由も完全には不明です。

select (case when max(ptl.RowDate) = Min(ptl.RowDate) 
      then 1 else 0 
     end) as OneValueFlag, 
     DATEPART(WEEK, rowdate) as week_ 
from m.dbo.tblLog ptl (nolock) 
where rowdate > GETDATE() - 91 
group by DATEPART(WEEK, rowdate); 
関連する問題