2

私はすでに数時間前からこの SQL パズルに頭を悩ませているので、「ねえ、スタックに聞いて、Web がソリューションから恩恵を受けられるようにしてみませんか?」と思いました。

だからここにあります。まず、これらは私の SQL テーブルです。

田畑

FieldID INT (PK)
FieldName NVARCHAR(50) (IX)

フォームフィールド

FieldID INT (FK)
FormID INT (FK)

FieldID INT (FK)
RecordID INT (FK)
Value NVARCHAR(1000)

フォーム

FormID INT (PK)
FormName NVARCHAR(50) (IX)

記録

RecordID INT (PK)
FormID INT (FK)
PoolID INT (FK)

データプール

PoolID INT (PK)
FormID INT (FK)
PoolName NVARCHAR(50) (IX)

次の制約を考慮してください。

  • 各フォームには 0 個以上の DataPool があります。各 DataPool は 1 つの Form にのみ割り当てることができます。
  • 各フォームには 0 個以上のフィールドがあります。各フィールドは複数のフォームに割り当てられる場合があります。
  • 各レコードには 0 個以上の値があります。各値は、単一のレコードにリンクされています。
  • 各 DataPool には 0 個以上のレコードがあります。各レコードは、単一の DataPool にリンクされています。
  • 各値は 1 つのフィールドにリンクされています。
  • また、すべての Name 列には一意の値があります。

さて、問題は次のとおりです。

次の列に基づいて、値テーブルからすべての値をクエリする必要があります。

  • 値にリンクされたフィールドの名前
  • 値にリンクされたレコードにリンクされたデータプールの名前
  • その DataPool にリンクされたフォームの名前

上記の 3 つの列は、ストアド プロシージャで受け取った 3 つのパラメーターと等しくなければなりません。

これが私がこれまでに得たものです:

CREATE PROCEDURE [GetValues]
@FieldName NVARCHAR(50),
@FormName NVARCHAR(50),
@PoolName NVARCHAR(50)

AS SELECT Value FROM [Values]
JOIN [Fields]
ON [Fields].FieldID = [Values].FieldID
WHERE [Fields].FieldName = @FieldName

Values テーブルの行を PoolName 列でフィルタリングするにはどうすればよいですか? DataPools テーブルは Values テーブルに直接関連付けられていませんが、Values テーブルに直接関連付けられている Records テーブルには関連付けられています。それを行う方法についてのアイデアはありますか?

4

2 に答える 2

0

あなたの質問には何かが欠けているように感じます。この解決策で問題が解決しない場合は、どこに問題がないかお知らせください。

SELECT
    Values.Value
FROM
    Values INNER JOIN Fields ON
        Values.FieldId = Fields.FieldId  
    INNER JOIN FormFields ON
        Fields.FieldId = FormFields.FieldId  
    INNER JOIN Forms ON
        FormFields.FormId = Forms.FormId
    INNER JOIN DataPools ON
        Forms.FormId = DataPools.FormId
WHERE
    Fields.FieldName = @FieldName
    AND
    Forms.FormName = @FormName
    AND
    DataPools.PoolName = @PoolName;
于 2010-08-23T18:01:52.020 に答える
0

あなたが何を必要としているのかを理解していれば、これはうまくいくはずです。

select * from values v

join records r
on v.recordid = r.recordid
join datapool dp 
on r.poolid = dp.poolid
join forms f
on r.formid = f.formid
join fields fi
on v.fieldid = fi.fieldid

where
    fi.FieldName = @FieldName
    AND
    f.FormName = @FormName
    AND
    dp.PoolName = @PoolName;
于 2010-08-23T18:16:48.440 に答える