1

私は5つのテーブルを持っています

Village

ここに画像の説明を入力


 T1_Master (Village_ID is a foreign key)

ここに画像の説明を入力


T2_Master (Village_ID is a foreign key)

ここに画像の説明を入力


T1_Details (t1_id is a foreign key) & (month,year,t1_id are combination of primary key(複合キー))

ここに画像の説明を入力


T2_Details (t2_id is a foreign key) & (month,year,t2_id are combination of primary key(複合キー)) ここに画像の説明を入力

ここでレコードを取得したい場合village_ID = 01, month=03 and year=2013

出力は次のようになります

ここに画像の説明を入力

here t1_1(No) = t1_1 has no record for month=03 and year=2013

Like wise t2_1(Yes) = t2_1 has record for month=03 and year=2013等々...

助けてください....お願いします

4

2 に答える 2

0

1つ以上のLEFTまたはRIGHT JOINを実装したいと思います:

 SELECT
    V.Village_ID    
    , Dates.[MONTH]
    , Dates.[YEAR]
    , CASE WHEN colValue IS NULL THEN 'no'
         ELSE 'yes'
         END [Yes or No]
FROM
    (
    SELECT
       Village_ID
    FROM 
        Villages
    WHERE
        Village_ID = @ParamVilageID
    ) V
    LEFT JOIN
    (
    SELECT
        Viilage_ID
        , [MONTH]
        , [YEAR]
    FROM
        T1_Details
    WHERE
        [MONTH] = @ParamMonth
        AND
        [YEAR] = @ParamYear
    ) Dates
    ON V.Village_ID = Dates.Village_ID

colValue として参照している列を決定する必要がありますが、すべての SQL 要素がそこにあります。SQL は case ステートメントからデータ型 (文字列) を推測しますが、単純なブール値 0 または 1 を返すこともできます

ところで、SQL には DatePart 関数と DateName 関数があるため、単一の smallDate 列を使用する方がはるかに優れています。

于 2013-05-30T15:19:08.087 に答える
0

null 値を取得するには、外部結合を使用する必要があります (左結合に関する利用可能なチュートリアルを検索することを検討することをお勧めします。多くは Google にあります)。重要なのは、マスター テーブルを使用して、詳細行が利用できない場合に ID を表示することです。

SELECT  v.Village_id, 
        CASE WHEN t1d.t1_id IS NULL THEN CAST(t1m.t1_id AS VARCHAR(50)) + ' (No)'
                ELSE CAST(t1m.t1_id AS VARCHAR(50)) + ' (Yes)'
        END T1,
        CASE WHEN t2d.t2_id IS NULL THEN CAST(t2m.t2_id AS VARCHAR(50)) + ' (No)'
                ELSE CAST(t2m.t2_id AS VARCHAR(50)) + ' (Yes)'
        END T2
FROM Village v 
        LEFT OUTER JOIN T1_Master t1m
        ON t1m.Village_ID = v.Village_ID
        LEFT OUTER JOIN T1_Details t1d
        ON t1d.t1_id = t1m.t1_id
            AND t1d.[month] = 03
            AND t1d.[year] = 2013
        LEFT OUTER JOIN T2_Master t2m
        ON t2m.Village_ID = v.Village_ID
        LEFT OUTER JOIN T2_Details t2d
        ON t2d.t2_id = t2m.t2_id
            AND t2d.[month] = 03
            AND t2d.[year] = 2013
WHERE v.Village_ID = 01

データベースの nulls 設定によってはCAST(t2m.t2_id AS VARCHAR(50)) + ' (No)'、単に '(No)' ではなく null を表示するために、ステートメントで t2m レコードが null かどうかを確認する必要がある場合があります。

于 2013-05-30T16:06:08.527 に答える