2017-03-21 3 views
0

このエラーが発生しました:集約は、HA句または選択リストに含まれるサブクエリに含まれていない限り集約できません。外側参照。'ON句に集約を表示できません'エラー

私はこれを修正する方法を知らないので、助けてください。

set datefirst 2 

select [Table 2].[Active_Headcount] 
    , DATEADD(DD, 7 - (DATEPART(DW, MIN([Table 1].[Term Date]))), MIN([Table 1].[Term Date])) as EndOfWeek 
    , COUNT(*) as TermsPerWeek 
from [Table 1] 
left join [Table 2] 
    on (DATEADD(DD, 7 - (DATEPART(DW, MIN([Table 1].[Term Date]))), MIN([Table 1].[Term Date]))) = [Table 2].[WeekDate] 
where [Table 1].[Term Date] not like 'null' 
    and (
     [Table 1].[Term Date] like '%2016%' 
     or [Table 1].[Term Date] like '%2017%' 
     ) 
group by DATEPART(WEEK, [Table 1].[Term Date]) 
    , [Table 2].[Active_Headcount] 
order by EndOfWeek asc; 
+4

(1)使用しているデータベースで質問にタグを付けてください。 (2)あなたが何をしたいか説明してください。構文的に不正確なクエリは、それらを書く人の意図を必ずしも伝えるものではない。 –

+0

月曜日に終了し、表2に参加したい場合は、[Term Date]を 'EndOfWeek'として集計します(日付も月曜日に終了します)。私が実行している問題は、[Term Date]ではなく、 'EndOfWeek'に基づいて参加する必要があることです。 –

+0

*サンプルデータ*と*予想される結果*を追加するように編集してください。 –

答えて

0

基本的には、それが言うことです。 JOIN条件のON句で集約演算を実行することはできません。 APPLY演算子を使用する必要があります。

set datefirst 2 

select Active_Headcount 
    , DATEADD(DD, 7 - (DATEPART(DW, MIN([Term Date]))), MIN([Term Date])) as EndOfWeek 
    , COUNT(*) as TermsPerWeek 
from table t1 
outer apply (
    select * 
    from [HeadcountByWeek] t2 
    where (DATEADD(DD, 7 - (DATEPART(DW, MIN(t1.[Term Date]))), MIN(t1.[Term Date]))) = t2.[WeekDate]) t2 
where t1.[Term Date] not like 'null' 
    and (
     t1.[Term Date] like '%2016%' 
     or t1.[Term Date] like '%2017%' 
     ) 
group by DATEPART(WEEK, t1.[Term Date]) 
    , t1.[Active_Headcount] 
order by EndOfWeek asc; 
+0

[Term Date]は表1のもので、[Active_Headcount]は表2のものです –

+0

コードを調整して受信しました。 –

0

私はこのようなものだろう:これは外に動作しません

set datefirst 2; 

With cte(Active_Headcount, EndOfWeek, TermsPerWeek) 
as (select Active_Headcount 
, DATEADD(DD, 7 - (DATEPART(DW, MIN([Term Date]))), MIN([Term Date])) as EndOfWeek 
, COUNT(*) as TermsPerWeek 
from table 1 
) 
select * from cte 
left join table 2 
on cte.EndOfWeek = [HeadcountByWeek].[WeekDate] 
where [Term Date] not like 'null' 
and (
    [Term Date] like '%2016%' 
    or [Term Date] like '%2017%' 
    ) 
group by DATEPART(WEEK, [Term Date]) 
, [Active_Headcount] 
order by EndOfWeek asc; 

また、私は[HeadcountByWeek]あなたの"table 2"であることを、あなたのコードからと仮定しますどの列がどのテーブルから来るのかわからないからです。

主なアイデアは、クエリをCTEに分解してから、その結合の列を下の結合で使用することです。

関連する問題