• 締切済み

1行で表示させたいのです

初歩的な質問をさせていただきます。 表示させたいのは以下のような感じです。 Aコード A名前 A時間 Bコード B名前 B時間 … ------------------------------------------------ 100    A      90    200     B    100  … という感じですべて一行で表示させたいのです。 SELECT CODE 'Aコード' , NAME '名前' , TIME '時間' , CODE 'Bコード' , NAME '名前' , TIME '時間' , CODE 'Cコード' , NAME '名前' , TIME '時間' FROM (SELECT TAR CODE , MAX(NAME) NAME , SUM(WORK_TIME) TIME FROM NIP , TAR WHERE NIP.TAR = TAR.CODE AND DDATE BETWEEN '2008/04/21' AND '2008/05/20' GROUP BY TAR) WHERE CODE = 100 サブクエリでは、4/21から5/20までのすべての社員の労働時間を出しています。TARが社員コード、NAMEが社員名、WORK_TIMEが一日の労働時間です。 この中から指定した社員コードの人のデータを1行で表示させたいのです。 一人だけなら、外のWHERE句でコードを100に指定すれば済む話ですが、 3人となると表示項目名が9つになるのでこの方法ではうまくいきません。コードが200、300の人を1行で表示させるにはどのような方法があるのでしょうか? ものずごく初歩的な質問で大変申し訳ありません。

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

前にもレスしたんですが、Oracleで可変列はできないと思います。 方法としては以下の代替案があります。 (1)Accessにリンクし、Transfer(集計)クエリにする。 (2)Excelに抽出し、行列を入れ替えてコピペする。

neokicki
質問者

お礼

ありがとうございます。

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

関連するQ&A

  • 最大値を求めたいのですが・・・

    初めまして。 SQL初心者でわからないことが多くて困っています。 求めたいのは、最も労働時間が長い人の労働時間を表示させる ということです。 以下が自分なりにつくったものです。 SELECT SCODE , NAME , MAX(TIME) FROM (SELECT TAR SCODE , MAX(NAME) NAME , SUM(WORK_TIME) TIME FROM NIP , MTOR WHERE NIP.TOR = MTOR.CODE AND DDATE BETWEEN '2008/04/21' AND '2008/05/20' GROUP BY TAR) サブクエリでは4/21~5/20までで、社員ごとに何時間働いたかを出力したものです。 TARが社員コード、NAMEが社員名、WORK_TIMEが一日の労働時間です。 これは以前作ったものなのでそのまま活かせないかと思ってサブクエリとして使っています。 そして、このサブクエリから出力した労働時間のなかから最大値をMAX(TIME)で表示させたのですが、当然、SCODEとNAMEは「GROUP BY の式ではありません」と怒られてしまいます。かといってこれらにMAX()関数を用いても、ただ単に社員コードが最大のものが表示されるだけで、労働時間が最大の人のコードと社員名が表示されません。 何かいい方法はありませんか? 長文で大変申し訳ないです・・・

  • POSTGRESQLでt時間差が30分以上の場合のみ表示したい

    time_aとtime_bの時間差が30分以上の 行をだしたいのですが SELECT time_a - time_b FROM hogetable WHERE (time_a - time_b) > (30/1440); とやっても全部でてしまいます。 (30/1440)が0と判定されているようでした。 (30/1440)を0.02083とか色々やってみましたが同じです。 SELECT time_a - time_b FROM hogetable WHERE (time_a - time_b) > 1; だと差が1日以上のものがちゃんと表示されます。 ファンクションをつくるしかないのでしょうか?

  • SELECTのスピード

    SELECTのスピードでどの方法が 検索スピードが速いのか教えてもらいたいのですが Aのテーブル DENNO CODE Bのテーブル CODE NAME Aのテーブルを主にAのCODEでBのテーブルを参照したい時 (1) SELECT A.DENNO,A.CODE, (SELECT B.NAME from B where A.CODE=B.CODE) AS NAME from A (2) SELECT A.DENNO,A.CODE,B.NAME FROM A LEFT JOIN B ON A.CODE=B.CODE (3) SELECT A.DENNO,A.CODE,B.NAME FROM A , B WHERE A.CODE=B.CODE(+)

  • mysql 部分一致+ユニーク指定+最新 を表示

    mysql初心者です。 検索語句(search)で部分一致するものを、名前(name)と更新日(update)でユニーク指定し、修正日(time)が最新のものだけを表示させたいのですが、望む結果が得られません…。  SELECT * FROM db WHERE name LIKE \"%{$search}%\" GROUP BY name,update までは正しいと思うのですが、さらにtimeの最新を指定する方法を教えていただけませんか? よろしくお願いします。 いろいろ探して試行錯誤し、以下に行きついたのですが、部分一致がうまく機能しない時があります。(情報不足などあればご指摘ください。) SELECT * FROM db where (time) in (SELECT MAX(time) FROM db WHERE name LIKE \"%{$search}%\" GROUP BY name,update) (中略・件数を取得しページャーに使っています) SELECT * FROM db where (time) in (SELECT MAX(time) FROM db WHERE name LIKE \"%{$search}%\" GROUP BY name,update) ORDER BY time DESC LIMIT $start,10 (中略・whileとmysql_fetch_arrayで表示させています)

    • ベストアンサー
    • MySQL
  • 各伝票に対して明細を1行目だけ表示したい

    たびたびお世話になります。 仮に以下のようなテーブルを考えるとします。 ○テーブルA (伝票) 伝票番号 (PK) 顧客コード ○テーブルB (伝票明細) 伝票番号 (PK) 伝票明細 (PK) 注文コード 大盛り区分 レストランなどでお客さんが注文した注文伝票を 想像していただければ良いかと思います。 一つの伝票番号に対して、複数の伝票明細があると。 DB上は上記のように格納するとします。 ここでテーブル結合を使って、各伝票の1行目の明細を表示しながら SQL1発で抜いてきたいと思います。どういうSQLを考えたら良いでしょうか? テーブルBの表示項目が1つだけなら、 SELECT A.伝票番号, A.顧客コード, (SELECT TOP 1 注文コード FROM テーブルB B WHERE A.伝票番号 = B.伝票番号) FROM テーブルA A で良いのですが、複数項目となるとどうやったら良いのか判りません。

  • EXISTSを使ったDELETE文

    「SELECT文の件数」と、 「同じSELECT文を使ったDELETE文の件数」が一致しない現象が起き、困っています。 【SELECT文】※2件返ってきます。 SELECT   a.部署コード,   a.社員コード FROM   社員マスタ a,   組織マスタ b WHERE   a.部署コード = b.部署コード 【DELETE文】※50件 DELETEされます。 DELETE TABLE   社員マスタ WHERE   EXISTS   (   SELECT     a.部署コード,     a.社員コード   FROM     社員マスタ a,     組織マスタ b   WHERE     a.部署コード = b.部署コード   ) 環境はSQLSERVER2005です。 件数はSQLSERVER2005のカウントオプションで表示されているものなので間違いないです。 宜しくお願いします。

  • Oracle[10g]のSQL文について(改めて)

    すみません。[B]テーブルの作成がおかしい様でしたので、 改めて質問させて下さい。 Oracle[10g]のSQL文についての質問です。(No.???) [A]テーブルに [CODE](KEY) [CODE2] [NAME] のフィールドがあります。 A-1 B-1 NAME-1 A-2 B-2 NAME-2 A-3 B-3 NAME-3 [B]テーブルに [CODE3](KEY) [NAMEB] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] のフィールドがあります。 X 1 A-1 X 2 A-3 Y 1 A-2 結果が [NO/LINE/CODE/NAMEB] X 1 A-1 NAME-B-1 X 2 A-3 (NULL) と、なる様にしたいのです。 SELECT C1.NO, C1.LINE,C1.CODE, Tx.NAMEB FROM C1 , ( SELECT C1.CODE, TNMx1.NAMEB FROM C1, ( SELECT CODE, CODE2, CODE3, NAMEB FROM A, B WHERE A.CODE2 = B.CODE3 ) TNMx1 WHERE C1.NO = 'X' AND C1.CODE = TNMx1.CODE(+) ) Tx WHERE C1.NO = 'X' GROUP BY C1.NO, C1.LINE,C1.CODE, Tx.NAMEB と、考えたのですが、何故か結果が X 1 A-1 (NULL) X 1 A-1 NAME-B-1 X 2 A-3 (NULL) X 2 A-3 NAME-B-1 4行もでてしまいます。 問題は、[B]テーブルです。 宜しくお願い致します。

  • 指定した行から指定した行数文データを取得したい

    WEB上で、1ページ10行のデータを表示したいので、 10行ずつデータを取得できるSQLを書きたいと思うのですが、方法が分かりません。 参考書に 41行目から50行目を取得する方法として SELECT TOP 10 A,B FROM MyTable WHERE keyID Not IN (SELECT TOP 40 keyID FROM myTable) とかかれていました。 この場合、データが keyID,A,B 1,A1,B1 2,A2,B2 ・ ・ ・ 40,A*,B* 41,A*,B* ・ ・ とkeyIDが重複しない時ですよね。 主キーが複数あるときはどのようなSQL文にすればいいのでしょうか?

  • 最後のデータを含むレコード1行 MYSQL

    お世話になります。 最後の日にちを含むレコード全ての抽出方法がどうしてもわかりません。 id name date amount 1 AA 3/1 5 2 BB 3/1 5 3 CC 3/1 5 4 AA 3/2 7 5 BB 3/2 4 6 AA 3/3 1 これを、select * from テーブル group by name とすると、 id name date amount 1 AA 3/1 5 2 BB 3/1 5 3 CC 3/1 5 select id, name, max(date),amount from テーブル group by name とすると、 id name date amount 1 AA 3/3 5 2 BB 3/2 5 3 CC 3/1 5 望んでいる結果はこうです。最後のdateを含むレコード全てです。 id name date amount 3 CC 3/1 5 5 BB 3/2 4 6 AA 3/3 1 select * from テーブル as a where a.date=(select max(b.date) From テーブル as b where a.id=b.id); このようにしましたが、データの数が膨大なのですごく時間がかかってしまいます。 他、シンプルな方法はないでしょうか。 よろしくお願いします。 MYSQL バージョン5.0.45

  • SQL-Server 6.5で最初の数行を抽出するには?

    SQL-Server 6.5で最初の数行を抽出するにはどのようにすればよろしいでしょうか? Oracleの場合、 SELECT * FROM TABLE_NAME WHERE ROWNUM <= 10; JETの場合、 SELECT TOP 10 * FROM TABLE_NAME; ですが、これをSQL-Serverで行う場合をご教授下さい。