0

調査の結果を含むデータのMSAccessのテーブルがあり、リスクIDのルックアップテーブルと、調査結果に基づくリスクの種類の説明があります。

これまでに試したのは、調査テーブルから個別のエントリを選択し、リスクコードのクエリに新しいフィールドを入力することです。リスクコードの数は、決定した基準によって異なり、リスクの検索に使用します。

調査用の私のテーブルは次のようになります。

Name       | Location | Days spent eating IceCream | Icecream eating location
John Smith | London   | 30                         | Hull

私のリスクIDテーブルは次のようになります。

RiskID | RiskBool | Description 
1      | Yes      | At risk -  This person eats too much icecream
2      | Yes      | Risk - This person does not eat enough icecream
3      | No       | Sensible amount of icecream eaten
4      | Yes      | It is illegal to eat icecream in Hull

そして、私のクエリは、アクセスデザインビューで(何か)このように見えます

Name       | Location | Risk Code | RiskID | Description

SQLを記述してリスクコードを1、2、3、4(実際の場合は最大15)に変更し、リスクIDとコードが一致する場合の人物と説明のみを表示するように指示します。私はまだこれを書いていません。

これを達成するための最良の方法は何ですか?

2つの可能性があります。

  1. リスクIDごとに1つずつ15のクエリを設定し、それらに説明を追加してから、それらの15セットの結果を結合します。これは私が行う方法を知っていることですが、かなり混乱してしまう可能性があります。
  2. ステートメントを使用して「チェック」をif設定し、次にそのエントリのリスクコードフィールドを設定する方法を設定します。

私の現在のSQLはこのように見えますが、まだチェックを行っていません。ステートメントが非常に長くなるかどうか心配しています。

SELECT DISTINCT 
[At Risk Employee List].Employee AS Name, 
[At Risk Employee List].[DaysIceCream] AS [Days spent eating Icecream], 
[At Risk Employee List].[Base Location],

     [RiskCode] AS [Risk Code], <----is this  where the check would need to go?

RiskDescLookup.RiskBoolean, 
RiskDescLookup.RiskExplanation
FROM RiskDescLookup, 
[Survey Raw Data] 
INNER JOIN 
[At Risk Employee List]
 ON 
[Survey Raw Data].ResID = [At Risk Employee List].[Staff ID]
GROUP BY 
[At Risk Employee List].Employee, 
[At Risk Employee List].[DaysIceCream],
[At Risk Employee List].[Base Location],
RiskDescLookup.RiskID,

     [RiskCode] AS [Risk Code],  <----is this  where the check would need to go?

RiskDescLookup.RiskBoolean, 
RiskDescLookup.RiskExplanation

ステートメントによって行われるチェックはif非常に長く、(擬似コードで)次のようになります。

if ( [At Risk Employee List].[Base Location] = Hull, then [RiskCode]=4...., else if (DaysIceCream>42) then....

これを行うための最良の方法ですか?リスクコードも必要ですか?

この「チェック」を可能な限り最良の方法で作成する方法について、私は少し迷っています。

4

2 に答える 2

1

私はあなたの意図を完全には確信していませんが、あなたが投稿した内容とフォローアップコメントから、各調査結果に対してリスクコードを特定すると、リスクコードをリスクIDに結合するプロセスは比較的簡単であるように見えます。

本当の問題は、各調査結果のリスクコードを特定するためのロジックをどのようにカプセル化するかということです。クエリの外部で各調査結果のリスクコード値を「計算」し、それらの結果に結合してから、最終的にリスクIDに結合することをお勧めします。

たとえば、とSurveyRiskを含むデザインに3番目のテーブルを追加する場合がNameありRisk Codeます。

各調査回答のリスクを特定するために使用する必要のある基準とロジックを使用してください。これらの値をSurveyRiskテーブルに入力します。次に、に参加SurveySurveyRiskRisk結果を要約します。

あなたが達成しようとしていることを私がどこで誤解しているのかを明確にしてください。それに応じて私の投稿を編集します。

于 2012-08-29T13:23:06.800 に答える
0

これを行う最良の方法は、データの構造をエミュレートするルックアップテーブルを使用することです。

'case'ごとに行を追加し、MSAccessで対応するフィールドをリンクします。

ここに画像の説明を入力してください

リンクのいくつかを次に示します。

ここに画像の説明を入力してください

次に、SQLを変更して、一緒に使用する必要のあるオプションをペアにします。たとえば、私が行う各チェックは、2つの別々の場所に複製されます。

次に例を示します。

FROM RiskDescLookupReg
 INNER JOIN ([Survey Raw Data]
 INNER JOIN [At Risk Employee List]
 ON [Survey Raw Data].ResID=[At Risk Employee List].[Staff ID])
 ON (RiskDescLookupReg.RegTravelChoice=[Survey Raw Data].RegTravelChoice)

 And (RiskDescLookupReg.MonthChoice2=[Survey Raw Data].MonthChoice2
 And RiskDescLookupReg.PercentageTimeChoice2=[Survey Raw Data].PercentageTimeChoice2
 And RiskDescLookupReg.LimitedDurationChoice2=[Survey Raw Data].LimitedDurationChoice2
 And RiskDescLookupReg.TemporaryPurposeChoice2=[Survey Raw Data].TemporaryPurposeChoice2)

 Or (
RiskDescLookupReg.MonthChoice1=[Survey Raw Data].MonthChoice1
 And RiskDescLookupReg.PercentageTimeChoice1=[Survey Raw Data].PercentageTimeChoice1
 And RiskDescLookupReg.LimitedDurationChoice1=[Survey Raw Data].LimitedDurationChoice1
 And RiskDescLookupReg.TemporaryPurposeChoice1=[Survey Raw Data].TemporaryPurposeChoice1)

場所ごとに2つのブロックがあるわけではありません。関心のある場所が1つしかない場合は、最後のブロックを削除できます。

ルックアップテーブルの配置方法が原因で重複が発生する場合は、ルックアップテーブルのパーツをで囲みLAST、調査のパーツをで囲むように指定する必要がありますFIRST。次に例を示します。

SELECT 
[At Risk Employee List].Number,
 FIRST([At Risk Employee List].Employee) AS Name, 
FIRST([At Risk Employee List].[Base Location]) AS BaseLocation, 
LAST(RiskDescLookupReg.RiskBool) AS RiskBool, 
LAST(RiskDescLookupReg.RiskDesc) AS RiskDesc,

を使用LASTすると、誰かが危険にさらされているが危険にさらされていない場合にLAST、危険にさらされているケースのみが表示されます(これらのエントリはフィールドの後半に表示されます)。これは、重複が表示される場合、リスクのあるものが最初に来るという事実に反しています。

于 2012-08-30T08:56:47.890 に答える