2017-08-16 3 views
1

この質問が正しくフォーマットされていないとお詫び申し上げます。私は、Oracleデータベースの高レベルのアイデアは、このX_METER_USEテーブルのエントリは私の組織でテストエンジニアがプロジェクトに行われているに対応することであるOracle SQL Queryヘルプで列に2つの値が入力されている可能性があります

SELECT * FROM X_METER_USE x 
LEFT JOIN INSTRUMENTS i on x.ID_NUMBER = i.NAME and x.INST_SNR = 'INSTRUMENT' 
LEFT JOIN STANDARD_REAGENT sr ON x.ID_NUMBER = sr.SAMPLE_NUMBER AND x.INST_SNR = 'SNR' 
WHERE x.INST_SNR = 'SNR' AND sr.SAMPLE_NUMBER = i.NAME; 

ために、次のクエリを作成しました。彼らは、INSTRUMENTテーブルの測定装置またはSTANDARD_REAGENTテーブルの化学物質で試験を実施した。 X_METER_USEのエントリでは、INST_SNRカラムの値が "INSTRUMENT"の場合、測定を実行するために機器を使用し、値が "SNR"の場合、テストを実行するために化学薬品を使用しました。各X_METER_USEのエントリは、PROJECTという列に格納されたプロジェクト番号に関連付けられています。ここでの関係は、1つのプロジェクトに多くのX_METER_USEエントリが関連付けられていることです。したがって、PROJECT列には、そのプロジェクトで実行されたすべてのテストに対応する重複エントリがあります。ここで

テーブルです:

enter image description here

そして、ここでいくつかの例では、

enter image description here

エントリーしている私は、エンジニアがでテストを入力したいくつかのプロジェクト番号を検索するクエリを必要とします私はフロントエンドのWebインターフェイスをテストし、私のロジックが正しいことを確認することができます。前もって感謝します!

答えて

2

私はあなたが

select * from X_METER_USE 
where project in (
    SELECT x.project FROM X_METER_USE x 
    INNER JOIN INSTRUMENTS i on x.ID_NUMBER = i.NAME 
    where x.INST_SNR = 'INSTRUMENT' 
    INTERSECT 
    SELECT x.project FROM X_METER_USE x 
    INNER JOIN STANDARD_REAGENT sr ON x.ID_NUMBER = sr.SAMPLE_NUMBER 
    where x.INST_SNR = 'SNR' 
) 
+0

完璧に働いてくれてありがとう! – pdaniels0013

2

たいかどうか確認する最も簡単な方法としてintersectを使用することになり、私が正しくあなたを理解していれば、あなたは化学テストや機器のテストの両方を持ってプロジェクトを見つけたいです。これを行うには

、私はあなたがするだろうと信じて:

(SELECT DISTINCT PROJECT FROM X_METER_USE WHERE INST_SNR = "INSTRUMENT") AS X 
JOIN (SELECT DISTINCT PROJECT FROM X_METER_USE WHERE INST_SNR = "SNR") AS Y 
ON X.PROJECT = Y.PROJECT 

を両方の方法によって試験これらのプロジェクトを含む単一のフィールド(プロジェクト)を使用してテーブルを取得します。それをあなたのプロジェクトテーブルに参加させて、必要であればプロジェクトに関する完全な情報を得ることができます。 (通常は、一方のエントリが他方のエントリと一致しない可能性がある場合にのみ、左または右の結合が必要ですが、それらのエントリが必要です;ここでは、テストされていないプロジェクトまたは有効なプロジェクトエントリがあるので、内部結合が必要です。)

+0

あなたのロジックは正しいようですが、スクリプトを実行しようとするとエラーが発生します。これはoracle SQL開発者とmy datagrip IDEの両方で最初の "AS" – pdaniels0013

関連する問題