質問
komtaqです。
実行環境がないので実動作確認はしていません。
SELECT
*
FROM
(SELECT ・・・①-1
イベントID,
イベント日1 as "イベント日",
イベントID1 as "スタッフID"
FROM
tablename
WHERE
イベントID between ’00001’ AND
’00003’
UNION ALL ・・・②
SELECT ・・・①-2
イベントID,
イベント日2 as "イベント日",
イベントID2 as "スタッフID"
FROM
tablename
WHERE
イベントID between ’00001’ AND
’00003’
) AS U
①1つのテーブルを2つのテーブル(①-1と①-2)として扱う。
※SELECT句で、列別名を指定して、同じ列名を使うようにしています。
<テーブル1(①-1)>
イベントID イベント日 スタッフID
00001 2009/01/23 0001
00002 2009/01/31 0003
00003 2009/01/23 0003
<テーブル2(①-2)>
イベントID イベント日 スタッフID
00001 2009/02/01 0002
00002 2009/02/01 0001
00003 2009/01/31 0002
②①で2つにしたテーブルを、UNION ALLでまとめます。
<まとめたテーブル>
イベントID イベント日 スタッフID
00001 2009/01/23 0001
00002 2009/01/31 0003
00003 2009/01/23 0003
00001 2009/02/01 0002
00002 2009/02/01 0001
00003 2009/01/31 0002
③ORDER BY句で、表示順を変える。
ここでは、列別名でテーブルを作ったので、列別名で指定する必要があります。
こんな感じで出来ると思います。
参考程度にしていただけたらと思います。
SELECT
イベントID, イベント日1 AS イベント日, スタッフID1 AS スタッフID
FROM テーブル
UNION SELECT
イベントID, イベント日2 AS イベント日, スタッフID2 AS スタッフID
FROM テーブル
ORDER BY イベント日
※ORDER BY句を「スタッフID」に変えれば、2つ目の結果がでます。
正規化された方がよろしいかと・・・
SQL1は WhiteFox さんと同じですが
−−−−−−−−−−−−−−−−−−
SELECT
T1."イベントID" as "イベントID",
T1."イベント日1" as "イベント日",
T1."スタッフID1" as "スタッフID"
FROM
TEST as T1
union
SELECT
T2."イベントID" as "イベントID",
T2."イベント日2" as "イベント日",
T2."スタッフID2" as "スタッフID"
FROM
TEST as T2
order by "イベント日","スタッフID"
−−−−−−−−−−−−−−−−−−
SQL2は
−−−−−−−−−−−−−−−−−−
SELECT
T1."イベントID" as "イベントID",
T1."イベント日1" as "イベント日",
T1."スタッフID1" as "スタッフID"
FROM
TEST as T1
union
SELECT
T2."イベントID" as "イベントID",
T2."イベント日2" as "イベント日",
T2."スタッフID2" as "スタッフID"
FROM
TEST as T2
order by "スタッフID","イベント日"
−−−−−−−−−−−−−−−−−−
で
イベントID イベント日 スタッフID
00001 2009/01/23 0001
00003 2009/01/23 0003
00003 2009/01/31 0002
00002 2009/01/31 0003
00002 2009/02/01 0001
00001 2009/02/01 0002
と
イベントID イベント日 スタッフID
00001 2009/01/23 0001
00002 2009/02/01 0001
00003 2009/01/31 0002
00001 2009/02/01 0002
00003 2009/01/23 0003
00002 2009/01/31 0003
がでます。
テーブルは
CREATE TABLE "TEST" (
"イベントID" varchar(5) NOT NULL default ’’,
"イベント日1" date default NULL,
"スタッフID1" varchar(4) default NULL,
"イベント日2" date default NULL,
"スタッフID2" varchar(4) default NULL,
PRIMARY KEY ("イベントID")
)
で できるのではないでしょうか
質問
初めまして
いつも拝見させていただいております。
現在mssqlserverに以下のようなテーブルがあります。
イベントID イベント日1 スタッフID1 イベント日2 スタッフID2
00001 2009/01/23 0001 2009/02/01 0002
00002 2009/01/31 0003 2009/02/01 0001
00003 2009/01/23 0003 2009/01/31 0002
これを以下のように表示したり
イベントID イベント日 スタッフID
00001 2009/01/23 0001
00003 2009/01/23 0003
00003 2009/01/31 0002
00002 2009/01/31 0003
00002 2009/02/01 0001
00001 2009/02/01 0002
以下のように表示したいのですが、可能でしょうか?
イベントID イベント日 スタッフID
00001 2009/01/23 0001
00002 2009/02/01 0001
00003 2009/01/31 0002
00001 2009/02/01 0002
00003 2009/01/23 0003
00002 2009/01/31 0003
お忙しいところ申し訳ありませんがよろしくお願いいたします。