質問
---再び質問をフレームします
table1{date, bID, sName, fID}
{11/05,B1,A1,P1}
{12/05,B2,A2,P2}
{13/05,B1,A3,P1}
{15/05,B3,A4,P1}
{16/05,B1,A5,P2}
{19/05,B1,A6,P2}
これはテーブルであり、テーブルに格納されたデータは、指定され...
今私がしたいクエリであること: -
FID(P1が選択されている、と言うことができます)に依存し、テーブルからのデータを表示すべきである(何日が見逃してはならない)、11/05から17/05から言います。次のように取得されたデータである: -
11/05,B1,A1
12/05,--,--
13/05,B1,A3
14/05,--,--
15/05,B3,A4
16/05,--,--
17/05,--,--
特定のFID(例えばP1)のために検索されたデータが表示されている..結果Explaning ...
FIDはP1である。ここで、1)には、日付がデータベースに存在しない場合、また、それがその日付のNULL値を表示する必要があり(ie14 / 05日がありませんでした、11/05から17/05からすべてのデータを表示しましたデータベースで、まだそれは)NULL値で表示..
2)その特定の日付のFIDは、P1でない場合、また、それが結果セット内のヌル値を格納..
Atlastデータが結果セットで取得,,そしてさらに処理される..
だから私はこのproblemmのクエリを書きたい,,それは可能です..
解決
ここではありませんコード、ちょうど私の考えています。
あなたは包括的、あなたの開始日から終了日までの日数で一時テーブルを作成する必要があります。そしてleft join
欄にその一時テーブルでtable1
をdate
プラスwhere fID = ?
を追加します。
他のヒント
は、すべてのそれの日付、およびLEFT JOIN
と表は何が必要です。
あなたは、このテーブルがあるとします:
CREATE TABLE table1
{
date DATETIME
bID VARCHAR(10),
sName VARCHAR(10),
fID VARCHAR(10)
}
、その後、この日付テーブル:
CREATE TABLE dates
(
dt DATETIME
)
と、この表に表示したい範囲のためのすべての日付を持っている必要があります。通常は、両方向の数年でそれを埋める、それはあなた次第です。
注:簡単にするために、私はどちらかのテーブルの主キーで気にしませんでした。もちろん、あなたが主キーを持っていることを確認しなければならない、とdates
テーブルの場合には、それはdt
列である可能性があります。の
次に、あなたが望む結果を表示します:
SELECT
dt,
bID,
sName
FROM
dates
LEFT JOIN table1 ON dt = date AND fld = 'P1'
ORDER BY
dt
のみP1
行の選択はJOIN
基準で行われていることに注意してください。あなたが同じことを行うためにWHERE
句を追加する場合は、データがないすべての日付を失うでしょう。