• ベストアンサー

ソートに関して(ACCESS)

教えて下さい。 あるテーブルに日付項目が2つ存在し、それら2つの項目を使って並び替え(昇順) をしたいと考えています。 《テーブル》  AAA 名前、日付1、日付2 山田,20130101, 山田,,20131201 山田,20130401, 結果として、 名前,日付X 山田,20130101 山田,20130401 山田20131201 という日付1と日付2がマージされた結果をソートするようなSQLができないかと考えて おります。 どのようなSQLを記述すれば良いか、教えて下さい。 よろしくお願いします。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

「日付1」と「日付2」の入力条件は、 まさか、両方とも入力されていて、なおかつ 両方とも違う、というような ことはありえないでしょうね。そのような 場合は「日付のマージ」なんてできませんが。 たぶん、質問の場合はどちらかに日付があり、フィールド を一つにまとめたい、というようことだろうと解釈します。 そこで、質問のテーブルの例では、 どちらかに日付がある。 なのですが、ついでに、 どちらかに日付がある。 どちらも空である。 どちらも日付あり、なおかつ同じ日付。 の三つの場合とすると、 SELECT AAA.名前, IIf(IsNull([日付1]),[日付2],[日付1]) AS 日付X FROM AAA ORDER BY IIf(IsNull([日付1]),[日付2],[日付1]); だけ、ですが。これは、 どちらかに日付がある。 日付を「昇順」に並べ替えをして表示。 に、対応したものなのですが、ついでに上記の 三つの場合にもあてはまります。

asamix_000
質問者

お礼

piroin654様、ご回答ありがとうございます。 日付項目としては、どちからに日付があるでしたので、取得したい内容が できました! ありがとうございました!

その他の回答 (1)

回答No.1

SELECT T4.id, T4.名前, T4.日付1, T4.日付2, ChoiceData(Str([日付1]) & ";" & Str([日付2])) AS 日付x FROM T4; どちらか一方しか入力されていなければ、単純に文字列として足せば事足ります。双方ともに入力されているケースがあるのであれば、どちらかを選択する関数を作れば目的は達成されます。 Public Function ChoiceData(ByVal strData As String) As Date   Dim strDatas() As String   strDatas = Split(strData, ";")   ChoiceData = IIf(strDatas(0) > strDatas(1), strDatas(0), strDatas(1)) End Function

関連するQ&A