0

このクエリの基準を満たす行の数をカウントしたい:

Select DISTINCT(projects.project_id)
    , projects.project_name
    , CONVERT(char(11), projects.kickoff_date, 102) AS kickoff_date
    , status_phase.status_name
    , eal.eal_abbrv
    , tech_types.tech_name
from projects
INNER JOIN tech_assigned
    ON projects.project_id = tech_assigned.project_id
INNER JOIN tech_types
    ON tech_assigned.tech_id = tech_types.tech_id
inner join status_phase
    on projects.status_phase_id=status_phase.status_phase_id
inner join eal
    on projects.eal_id=eal.eal_id
where status_phase.status_id <= 2 
    order by eal.eal_abbrv

eal.eal_name 列でグループ化されたカウントが必要ですが、これを実行しようとすると、「'projects.project_id'集計関数または GROUP BY 句のいずれにも含まれていないため、選択リストで列が無効です」という恐ろしいメッセージが表示されます。エラーメッセージ。Select COUNT(*)またはCOUNT(1)関数 を使用してレコードをカウントできますが、グループ内でカウントする必要があります。

4

2 に答える 2

0

クエリに含まれていなかったので、eal.eal_name 列に追加します。したがって、# を取得する列で count() を実行し、その列を再度追加してから、GROUP BY 句を追加して、選択しているすべての列を追加する必要があります。

Select DISTINCT(projects.project_id)
, projects.project_name
, count(eal.eal_name)
, eal.eal_name
, CONVERT(char(11), projects.kickoff_date, 102) AS kickoff_date
, status_phase.status_name
, eal.eal_abbrv
, tech_types.tech_name
from projects
INNER JOIN tech_assigned
ON projects.project_id = tech_assigned.project_id
INNER JOIN tech_types
ON tech_assigned.tech_id = tech_types.tech_id
inner join status_phase
on projects.status_phase_id=status_phase.status_phase_id
inner join eal
on projects.eal_id=eal.eal_id
where status_phase.status_id <= 2 
group by projects.project_id
, projects.project_name
, eal.eal_name
, CONVERT(char(11), projects.kickoff_date, 102)
, status_phase.status_name
, eal.eal_abbrv
, tech_types.tech_name
order by eal.eal_abbrv
于 2013-01-31T17:42:04.093 に答える
0

ウィンドウ関数を使用してみてください...

このような...

    declare @table table (a int, b int)
    insert into @table
    values (0,0),(0,1),(0,1),(1,2)

    select *
    ,COUNT(*) over () as [count all]
    ,COUNT(*) over (partition by a) as [count as grouped by a]
    ,COUNT(*) over (partition by a,b) as [count as grouped by a and b]
    from @table T

私の結果セットは

    a   b   count all   count as grouped by a   count as grouped by a and b
    0   0   4           3                       1
    0   1   4           3                       2
    0   1   4           3                       2
    1   2   4           1                       1

あなたのクエリでは

    Select DISTINCT(projects.project_id)
                    , count(*) over (partition by eal.eal_name) as [count by eal_name]
        , projects.project_name
        , CONVERT(char(11), projects.kickoff_date, 102) AS kickoff_date
        , status_phase.status_name
        , eal.eal_abbrv
        , tech_types.tech_name
    from projects
    INNER JOIN tech_assigned
        ON projects.project_id = tech_assigned.project_id
    INNER JOIN tech_types
        ON tech_assigned.tech_id = tech_types.tech_id
    inner join status_phase
        on projects.status_phase_id=status_phase.status_phase_id
    inner join eal
        on projects.eal_id=eal.eal_id
    where status_phase.status_id <= 2 
        order by eal.eal_abbrv
于 2013-01-31T17:46:27.967 に答える