2017-03-08 7 views
1

化学物質データを含むレポートを生成する一連のクエリがあります。 2つの化合物AおよびBがあり、ここで、Aは総量であり、Bは(例えば全鉄および第一鉄のような)特定量である。アクセスクエリで、2つの値が1つの列に存在する場合は1つを省略します。

クエリ結果には合計約100の化合物があり、化合物AおよびBの両方が存在する場合、化合物Bのみが表示されるように結果をフィルタリングする基準が必要です。これまではクエリビルダーの基準セクションにいくつかのiifステートメントを追加してみましたが、これは不運です。ここで

は、私がこれまで持っているものです。

SELECT Table1.KEY_ANLT 
FROM Table1 
WHERE (((Table1.KEY_ANLT)=IIf([Table1].[KEY_ANLT]=1223 And [Table1].[KEY_ANLT]=70,70,1223))); 

これは、化合物Aをフィルタリングするが、化合物の残りの部分が含まれていません。他の化合物も含めるようにクエリを変更するにはどうすればよいですか?

+0

サンプルSQLを投稿することをお勧めします。 – Fionnuala

+0

またはいくつかのサンプルデータ – marlan

+0

さらに、通常の基準を満たさないテーブルデザインがあるようです。 – Fionnuala

答えて

0

したがって、上記のコメントの一部を明確にするために、ここで問題となるのは、一緒になった値を識別する方法を持たない(または指定していない)ことです。あなたは70と1223を例に挙げましたが、すべての数字のリストを私たちに与えたら、どのようなものが一緒になるのかをどのように特定できるでしょうか?あなたは "化学の専門知識"と言うかもしれませんが、それは化合物の名前を持つ別の列に基づいていますよね?したがって、実際には、その列をクエリで使用する必要があります。しかし、関連する名前をどのようにつなぐかという問題は残されています(例えば、「鉄の総量」と「鉄の鉄」は両方とも「鉄」という言葉を持っているため接続されていますが、「過マンガン酸塩」と「マンガン」はどうですか?要するに、これらの別々の行の間で、要素、イオン、料金などの項目を共通に指定する別の列が必要です。クエリに含める各「グループ」の行を識別する列も必要です(または除外する)。例:次に

+----------+-----------------+---------+---------+ 
| KEY_ANLT | Compound  | Element | Primary | 
+----------+-----------------+---------+---------+ 
|  70 | total iron  | Fe  | Y  | 
|  1223 | ferrous iron | Fe  |   | 
|  1224 | ferric iron  | Fe  |   | 
|  900 | total manganese | Mn  | Y  | 
|  901 | permanganate | Mn  |   | 
+----------+-----------------+---------+---------+ 

、単に「プライマリ」の行を表示するクエリを取得するには、それは非常に簡単です:

SELECT * FROM Table1 WHERE Primary='Y'; 

その[プライマリ]欄がなければ、あなたはどのように決定する必要があるだろう各行を選択します。おそらくKEY_ANLTが最小のものが必要でしょうか?

SELECT Table1.* 
FROM 
    (SELECT Element, min(KEY_ANLT) AS MinKey FROM Table1 GROUP BY Element) AS Subquery 
    INNER JOIN Table1 ON 
     Subquery.Element=Table1.Element AND 
     Subquery.MinKey=Table1.KEY_ANLT 

WHERE句は、WHERE句が行単位で動作し、異なる行を相互に比較しないためです。だからあなたのSQLに:単一の行がKEY_ANLT = 1223 AND KEY_ANLT = 70を持っていないため、行の

IIf([Table1].[KEY_ANLT]=1223 And [Table1].[KEY_ANLT]=70,70,1223) 

NONEは、70としてこれを評価しません。各行にはKEY_ANLTの値が1つしかありません。したがって、IIF式はすべての行に対して1223と評価され、条件はKEY_ANLT = 1223(化合物B)の行のみを返します。

関連する問題