• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLについて(横並びのデータを縦並びのデータにしたい))

SQLで横並びデータを縦並びにする方法

このQ&Aのポイント
  • SQLを使用して、横並びのデータを縦並びに変換する方法について教えてください。
  • 具体的には、年月、会社、事業部ごとに表示されるデータを、会社、事業部、人数の形式で表示したいです。
  • 何か方法があれば教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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などのマイクロソフト製品でも独自仕様があり、[ ] で囲みます。

liberty01
質問者

お礼

すぐの回答ありがとうございます>< 確かにUNIONで一個一個くっつければよかったですね。気付かなかったwありがとうございました。 無事に完成することができました。^^ ってか、言語何かを説明したなかったでしたね>< 言語はExcelのVBAでした。 あと、SQLServerにそんな機能があったのを知らなかったorz 結構使ってたのに・・・・まだまだ勉強不足ですね↓頑張ります^^ノ

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MAX値を条件にデータを取得するには?

    SQL文で困っています。 ご教授下さい。 下記のようなデータがあった場合、それぞれの区分毎に 年月が最大(最新)のデータを取得したいです。 (実際には1レコードにその他項目があり、それらも取得します。) <検索対象データ> 区分 年月   金額 ----------------------------- A   200412  600 A   200503  560 B   200311  600 B   200508  1000 B   200504  560 C   200508  400 C   200301  1100 <取得したいデータ> 区分 年月   金額 ----------------------------- A   200503  560 B   200508  1000 C   200508  400 よろしくお願いします。

  • データ抽出SQLについて

    以下の様なテーブル内容のデータがあり、抽出条件:項目Aが同一でかつ、その項目Aに対する項目Bの値がひとつでも異なっている項目Aを抽出するSQLについて教えてもらえないでしょうか。よろしく御願い致します。 <データの内容> 項目A 項目B 0001 A 0001 A 0002 A 0002 B 0003 C 0003 A 0003 A 0004 B 0004 B 0004 B 0004 B <抽出結果> 0002 0003

  • postgreSQL SQL

    postgreSQL7.3で以下のようなデータの並び替えを実現したいと思っています。 下記のようなデータを・・・ no | recno | name ----+-------+------ 1 | 1 | a 1 | 1 | b 1 | 2 | c 1 | 4 | a 2 | 3 | a 2 | 3 | c 2 | 3 | b 3 | 5 | b 4 | 6 | a 下記のような並びにSQLで取得することは可能でしょうか。 no | recno | name1 | name2 | name3 ----+-------+------+------+------ 1 | 1 | a | b | 1 | 2 | c | | 1 | 4 | a | | 2 | 3 | a | b | c 3 | 5 | b | | 4 | 6 | a | | noとrecnoのグループごとにnameを横に並べていきたいのですが、 可能なのでしょうか。 できれば、nameは個々のカラムに出力したいのですが、 配列のように1つのカラム内にカンマ区切りでの出力でも構いません。 上記のような表示が可能であれば、SQL文もご教授いただけますと幸いです。 宜しくお願いいたします。

  • 指定した年月までのデータを取得するSQL文

    いつもお世話になっております。 今、指定した年月までのデータを取得するSQL文を考えています。 例:NENGETSU_DATEカラムがDATE型で、 データとして、2008/11/12と、2008/11/18と、2008/12/12が入っているとして、11月だけのデータを取得したい。(今回は、2008/11/12と、2008/11/18を取得) どのようなSQL文を書けばよろしいでしょうか。 よろしくお願いいたします。

  • MAX値を条件にしたSQLで困っています。

    MAX値を条件にしたSQLで困っています。 以下のようなデータ(例)があります。 部番A、連番1、明細・・・ 部番A、連番2、明細・・・ 部番A、連番3、明細・・・ 部番A、連番4、明細・・・ 部番B、連番1、明細・・・ 部番B、連番2、明細・・・ 部番単位で、連番が最大であるデータのみを取得したいです。 上記の例だと、 部番A、連番4、明細・・・ 部番B、連番2、明細・・・ の2件です。 SQLをご教授ください。 よろしくお願いします。

  • SQL文をどなたか教えてください。

    いつもお世話になっております。 例えば以下のようなテーブルがあります。 顧客名  紹介者 [フィールド名] Aさん   null Bさん   Aさん Cさん   Bさん Dさん   Cさん Eさん   Aさん Fさん   Cさん この中から以下のような結果が出るクエリ↓ 顧客名 紹介者カウント [フィールド名] Aさん   2 Bさん   1 Cさん   2 Eさん   0 Fさん   0 を作成するには、どのようなSQL文を組み立てたら よいのでしょうか? [顧客名でDISTINCT、紹介したカウントを求める。 カウントは"AS 紹介者カウント" で格納] 例えば、Aさんは2回誰かを紹介している。 何度やってもできません。 どなたかご教授ください。

  • (VBA) 横並びを縦並びに

    kkkkkmさん、毎回アドバイスいただき感謝します。 以下のスレッドが元になります。 https://okwave.jp/qa/q10027270.html なぜだか?私の質問スレッドが消えてしまいました。 途中で投げ出したような感じで気持ちが悪いので続けます。 以下は、最後のkkkkkmさんの回答への追加質問になります。 >LastRowNum2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row >の位置がソートの前のあたりに無いと1回目(実行前のsh2にデータが無い時LastRowNum2が1のままなので)ソートしてくれませんでした。 LastRowNum2は、ソートの時のソート範囲にしか利用しないので おっしゃるようにソートの前で問題ないのですが sh2にDATAが無い状態とは マクロが実行されていない最初の状態又は SH1にDATAが無い状態でマクロを実行した時だけだと思うのですが ? 一応、次回に備えてsh2のシート全体を初期化のため sh2.Cells.ClearContents を最初に追加しました。 >D列のソートでいいかどうか、利用者で変更してくれるといいですね。 今回はD列(項目)でソートしていますが ソートのキーとしてA,B,C,Dの4つが考えられます。 それぞれ優先順位でD-A-B-C や A-B-C-D など色々組み合わせが考えられますが これの組み合わせを網羅して利用者が選択できるようにするには 簡単では無いような気がします。 勉強のため少し考えてみますが、 考え方(ロジック)や使用すべき関数などを紹介下さい。 >Resize 確かにresizeを使用したほうが分かりやすいですね。 '------------------------------------- と「ここまで」記載した時点でスレッドが消滅してしまいました。 以下が現在のコード Option Explicit Sub Macro1() Dim sh1 As Worksheet, sh2 As Worksheet Dim LastRowNum As Long, LastRowNum2 As Long Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") LastRowNum = sh1.Cells(Rows.Count, 1).End(xlUp).Row '書き出しシート(sh2)の初期化 sh2.Cells.ClearContents '見出し行 sh2.Range(sh2.Cells(1, "A"), sh2.Cells(1, "D")).Value = sh1.Range(sh1.Cells(1, "A"), sh1.Cells(1, "D")).Value '同一(ID,名前) sh2.Range(sh2.Cells(2, "A"), sh2.Cells(LastRowNum, "B")).Value = sh1.Range(sh1.Cells(2, "A"), sh1.Cells(LastRowNum, "B")).Value sh2.Range(sh2.Cells(LastRowNum + 1, "A"), sh2.Cells(2 * LastRowNum - 1, "B")).Value = sh1.Range(sh1.Cells(2, "A"), sh1.Cells(LastRowNum, "B")).Value '手術日,項目 sh2.Range(sh2.Cells(2, "C"), sh2.Cells(LastRowNum, "D")).Value = sh1.Range(sh1.Cells(2, "C"), sh1.Cells(LastRowNum, "D")).Value '手術日,項目(配置換え) sh2.Range(sh2.Cells(LastRowNum + 1, "C"), sh2.Cells(2 * LastRowNum - 1, "D")).Value = sh1.Range(sh1.Cells(2, "E"), sh1.Cells(LastRowNum, "F")).Value LastRowNum2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row 'ソート sh2.Range(sh2.Cells(2, "A"), sh2.Cells(LastRowNum2, "D")).Sort key1:=sh2.Range("D1"), order1:=xlAscending, Header:=xlYes Set sh1 = Nothing Set sh2 = Nothing End Sub

  • SQL文をご教授願います

    SQL文をご教授願います。 以下のようなテーブルを仮定しています。 A   B    C   D ---------------------- 10  100  1203 A 10  200  1204 B <--- 取得したい 11  300  1203 C 11  300  1204 D <--- 12  400  1206 D 12  500  1207 E <--- ・ ・ A列をー意にして、A列・D列のデータを取得したい 条件 Bの大きい方を取得する Bの値が同じ場合はCの大きい方を取得する。 (A列には同じデータが2以上あるとします) (C列には同じデータはありません) 欲しい結果 A   D -------- 10 B 11 D 12 E

  • SQLで複数列のデータを複数行にしたい

    以下のようなテーブルがあるとします。 column1 a,b,c <- カンマの数は最大50 b,d c,x SQLを実行し以下のような結果を返したいです。 以下の3つのことをすればできそうなのですが複数列を複数行にする方法がわかりません。 1.strtokenで50カラムに分割(カンマ分割) 2. 50カラムを1カラムにする 3.DISTINCTで重複データの削除 結果 a b c d x カンマの数が50あるので、かなり長いSQLになるのですが SELECT文50個をUNIONしてやればできるかなとも考えているのですが 何か良い方法はないでしょうか。 よろしくお願いします。

  • こんなSQL文

    Oracle8.1.7を使用しております。 以下のようなテーブルに対し、1行目と2行目を削除するSQL文を書きたいのですが、思いつきません。どなたか、アドバイスいただけないでしょうか? 表名:A   B | C ――――――――   2 | 10   2 | 1   1 | 10   1 | 1   1 | 11   1 | 2   1 | 1   3 | 10   2 | 3 変数として、P1=1とP2=2があります。(これは、SQL文の中に直接書くものとします。) ここで、SELECT B,C FROM A WHERE B=1;とSELECT B,C FROM A WHERE B=2;を実行すると、次のようになります。   B | C     B | C ――――――――― ―――――――――   1 | 10    2 | 10   1 | 1     2 | 1   1 | 11    2 | 3   1 | 2   1 | 1 ここで、それぞれの表を見ると、Cの値が一致している部分があります。この一致していて、Bが2の行を削除したいのですが、SQL1文では無理でしょうか? 最近、SQLには慣れてきたつもりだったのですが、こんなとこでつまずくとは・・・どうぞよろしくお願いします。