質問

---再び質問をフレームします
  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欄にその一時テーブルでtable1dateプラス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句を追加する場合は、データがないすべての日付を失うでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top