プロが教えるわが家の防犯対策術!

いつもお世話になっております。

質問なのですが以下のデータがあったとして、

年月  会社 A事業部_人数 B事業部_人数
――――――――――――――――――――――
11/18  A   25      40
11/18  B   20      30
11/18  C   100     150

これを

年月  会社 事業部  人数
――――――――――――――――――――――
11/18  A   A    25
11/18  A   B    40
11/18  B   A    20
11/18  B   B    30
11/18  C   A    100
11/18  C   B    150

としたい場合、SQLはどうなりますか?いろいろ考えたのですが自分では無理でした。どなたかご教授ください><

A 回答 (1件)

RDBMS名とバージョンを、明記するようにしてください。



簡単な方法としては、unionを使います。
なお、このテーブル設計では、事業部の種類だけ、unionが必要になってしまいます。

select * from(
select 年月,会社,'A' as 事業部,A事業部_人数 as 人数 from t1
union
select 年月,会社,'B' as 事業部,B事業部_人数 as 人数 from t1
) as x
order by 年月,会社,事業部

RDBMSがSQL Server 2005以降なら、pivotという機能があります。

標準SQLや主要なRDBMSでは、日本語の表名、列名を使う場合、"(二重引用符)で囲む必要があるかも知れません。
MySQLではこの部分に独自仕様があり、`(バックォート)で囲みます。
SQL Serverなどのマイクロソフト製品でも独自仕様があり、[ ] で囲みます。
    • good
    • 0
この回答へのお礼

すぐの回答ありがとうございます><

確かにUNIONで一個一個くっつければよかったですね。気付かなかったwありがとうございました。

無事に完成することができました。^^

ってか、言語何かを説明したなかったでしたね>< 言語はExcelのVBAでした。

あと、SQLServerにそんな機能があったのを知らなかったorz 結構使ってたのに・・・・まだまだ勉強不足ですね↓頑張ります^^ノ

お礼日時:2009/11/19 09:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!