2

ですから、私はSQLにかなり慣れておらず、これまでのところほぼ完全に独学です。私は現在、スタッフのランクについていくつかの分析を実行しようとしています。そこでは、約15以上のランクを4つのランクのカテゴリに「再分類」しようとしています。次に、これらのカテゴリでグループ化したいのですが、問題が発生しています(SQL for Dummiesが不足しているようであるか、答えが見つかりません...)。

とにかく、私が今持っている質問は次のとおりです。これにより、group byには外部参照ではない1つの列が含まれている必要があるというエラーが発生します。これは理解できますが、回避方法がわかりません。

編集:私は私に次のような結果を得ることを目指しています:

RANK                      Hours etc
Equity Partner            12
Fixed Share Partner       20
Associate                 50
Trainee                   25
Other                     15 

どんな助けでも大歓迎ですマット

declare @startperiod as integer
declare @endperiod as integer
declare @offc as integer
declare @dept as varchar(3)

select @startperiod = '201101'
select @endperiod = '201112'
select @offc = '55'

select 
    case k.rank_code 
                when '10'   then 'Equity Partner'
                when '110'  then 'Fixed Share Partner'
                when '130'  then 'Associate'
                when '131'  then 'Associate' 
                When '132'  then 'Associate'
                when '133'  then 'Associate'
                when '134'  then 'Associate'
                when '135'  then 'Associate'
                when '136'  then 'Associate'
                when '137'  then 'Associate'
                when '141'  then 'Associate'
                when '142'  then 'Associate'
                when '341'  then 'Trainee'
                when '342'  then 'Trainee'
                else 'Other'
end as 'Rank Desc',
sum(b.base_hrs) as 'Base Hrs',sum(b.tobill_hrs) as 'ToBill Hrs',sum(b.billed_hrs) as 'Billed Hrs', 
sum(b.base_amt) as 'Base Amt',sum(b.tobill_amt) as 'ToBill Amt',sum(b.billed_amt) as 'Billed Amt'

from blh_billed_fees b, tbl_rank k, tbm_persnl p
where b.tk_empl_uno = p.empl_uno
and p.rank_code = k.rank_code

group by 'Rank Desc'
4

3 に答える 3

2

現在の選択で定義された列を使用してgroupbyを実行することはできません。

これでサブクエリを選択すると、RankDesc列を使用してgroupbyを作成できます。


最終的なクエリは次のようになります。

select 
aux.RankDesc as 'Rank Desc',
sum(aux.base_hrs) as 'Base Hrs',
sum(aux.tobill_hrs) as 'ToBill Hrs',
sum(aux.billed_hrs) as 'Billed Hrs', 
sum(aux.base_amt) as 'Base Amt',
sum(aux.tobill_amt) as 'ToBill Amt',
sum(aux.billed_amt) as 'Billed Amt'

from
    (select 
        case k.rank_code 
                    when '10'   then 'Equity Partner'
                    when '110'  then 'Fixed Share Partner'
                    when '130'  then 'Associate'
                    when '131'  then 'Associate' 
                    When '132'  then 'Associate'
                    when '133'  then 'Associate'
                    when '134'  then 'Associate'
                    when '135'  then 'Associate'
                    when '136'  then 'Associate'
                    when '137'  then 'Associate'
                    when '141'  then 'Associate'
                    when '142'  then 'Associate'
                    when '341'  then 'Trainee'
                    when '342'  then 'Trainee'
                    else 'Other'
    end as 'RankDesc',
    b.base_hrs,
    b.tobill_hrs,
    b.billed_hrs, 
    b.base_amt,
    b.tobill_amt,
    b.billed_amt

    from blh_billed_fees b, tbl_rank k, tbm_persnl p
    where b.tk_empl_uno = p.empl_uno
    and p.rank_code = k.rank_code) aux
group by aux.RankDesc

@PhilipKelleyが述べたように、group by partにケースを含めることもできます。これにより、サブクエリを使用する必要がなくなります。

于 2012-05-09T14:23:26.520 に答える
0

それをサブクエリにして、結果のフィールドでグループ化するか、(十分に再利用可能であれば、おそらくもっと良いですが)ビューを作成してそのフィールドでグループ化します。

于 2012-05-09T14:28:23.410 に答える
0

select with caseはサブクエリである必要があります。これにより、paarentが実行されたときにテーブルとして表示され、グループ化を簡単に適用できます。

于 2012-05-09T14:33:38.670 に答える