3

3つのテーブルから「履歴/ログページ」を作成しようとしています。テーブルは次のようになります。

TableA

CreationDate
ModifDate
LastAccessedDate
FileName

TableB

Guid_TableA
CreationDate
ModifDate
LastAccessedDate
FileName

TableC

Guid_TableA
LastModifDate
FileName

FWIW、列名は類似していますが、これらのテーブルの日付間には関係がありません。それらの間に関連する唯一の有効な列はGuid_TableAです

私が欲しいのは...

レコードを選択し、日付順に並べ替えます。イベントログを作成しようとしているので、このような重複したエントリを返すことは有効です(結果が日付順に正しく並べられている限り)

(TableA)  file-1.txt    '01/01/2012 00:00:00' (CreationDate)
(TableA)  file-1.txt    '01/01/2012 00:00:01' (ModifDate)
(TableB)  file-2.txt    '01/01/2012 00:00:02' (CreationDate)
(TableA)  file-1.txt    '01/01/2012 00:00:03' (LastAccessedDate)

うまくいけば、私の意図は明確です。基本的に、日付順に並べられたレコードを選択したい(つまり、重複したエントリを含む、複数のクロステーブル列に対して並べ替えられた)

私の質問は:これは可能ですか?もしそうなら、どのように?

4

1 に答える 1

3

演算子を使用してUNION ALL、いくつかの選択の結果をマージします。

SELECT FileName, CreationDate AS Date FROM TableA
UNION ALL SELECT FileName, ModifDate FROM TableA
UNION ALL SELECT FileName, LastAccessDate FROM TableA
UNION ALL SELECT FileName, CreationDate FROM TableB
-- ...etc
ORDER BY Date;

これらの「TableA」および「CreationDate」アノテーションが必要な場合は、リテラル文字列としてそれらを追加することもできます。

SELECT 'TableA', FileName, CreationDate AS Date, 'CreationDate' FROM TableA
UNION ALL SELECT 'TableA', FileName, ModifDate, 'ModifDate' FROM TableA
UNION ALL SELECT 'TableA', FileName, LastAccessDate, 'LastAccessDate' FROM TableA
UNION ALL SELECT 'TableB', FileName, CreationDate, 'CreationDate' FROM TableB
-- ...etc
ORDER BY Date;

それは私に与えます:

TableA|file-1.txt|01/01/2012 00:00:00|CreationDate
TableA|file-1.txt|01/01/2012 00:00:01|ModifDate
TableB|file-2.txt|01/01/2012 00:00:02|CreationDate
TableA|file-1.txt|01/01/2012 00:00:03|LastAccessDate
于 2012-11-08T00:02:00.617 に答える