2017-10-24 24 views
0

私は職場災害の記録を保持するテーブルを持っています。各IncidentNoはユニークであると考えられています。各IncidentNoに2つのエントリ(各性別ごとに1つ)があるようにデータを提供した組織。テーブルの書式は次のようなものです。私は必要なもの2つの異なる列の値を持つ2つの行を1つにまとめる

+------------+--------+----------------+ 
| IncidentNo | Gender | PersonnelCount | 
+------------+--------+----------------+ 
|  123456 | M  |   150 | 
|  123456 | F  |   100 | 
|  789012 | M  |    31 | 
|  789012 | F  |    42 | 
+------------+--------+----------------+ 

(表は、列のすべてがvarcharです。私は質問に関連するものを示したが、周りに110列があります)(重要ではありませんので、テーブルような方法でこれらの列を組み合わせることですそれは同じテーブルの上にあるか、新しい1つに挿入)このようなものである場合:

+------------+----------------------+--------------------+ 
| IncidentNo | FemalePersonnelCount | MalePersonnelCount | 
+------------+----------------------+--------------------+ 
|  123456 |     100 |    150 | 
|  789012 |     42 |     31 | 
+------------+----------------------+--------------------+ 

私は新しいテーブルにデータを挿入するためにLeft Outer Joinを使用すると思ったが、方法を見つけ出すことができませんでした。

+1

私は互換性のないデータベースタグを削除しました。使用しているデータベースのみにタグを付けてください。 –

+0

これはピボットの問題です。http://modern-sql.com/use-case/pivot –

+1

appliactionコードのデータ表示の問題を処理することを検討してください。 – Strawberry

答えて

3

ただ、条件付きの集約使用:私はちょうど合計が'M''F'の合計と一致することを確認するために、同様の合計を計算します

select incidentno, sum(PersonnelCount) as total_PersonnelCount, 
     sum(case when gender = 'M' then PersonnelCount else 0 end) as nummales, 
     sum(case when gender = 'F' then PersonnelCount else 0 end) as numfemales, 
from t 
group by incidentno; 

を。そのrawest形で

1

、あなたは自分が参加することができます:

select x.IncidentNo, 
     sum(a.personelcount) as Female, 
     sum(b.personelcount) as Male 
from Accidents x 
left join Accidents a 
    on a.incidentno = x.incidentno 
    and a.Gender = 'F' 
left join Accidents b 
    on b.incidentno = x.incidentno 
    and b.Gender = 'M' 
group by x.IncidentNo -- I left this out originally because I'm an idiot 
+0

これは、DBMSによっては無効な構文か非決定論的です(selectに 'x.IncidentNo'を含めないでください)。自己結合によっても重複が発生し、結果が不正確になる可能性があります。 – GarethD

+0

@GarethD編集を参照してください – JohnHC

+0

少なくとも構文が有効なので、私はdownvoteを削除しましたが、これでも正しい結果が得られません。サンプルデータでは、このクエリによってすべてが倍になります。http://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=a42fd8fec5c550b4610011eac9b5e3fe – GarethD

関連する問題