2017-07-18 4 views
1

この質問は説明するのが少し難しいです。SQL Server:行の反対のエントリを取得する

すべての鑑定評価は反対の鑑定評価を有する。従業員は自分の教育者を評価し、教育者はその従業員を評価する。したがって、各計画要素には2つの評価行があり、それぞれに時間枠が含まれています。

私は、ステートメントに与えられたものとは反対の査定をパラメータとして返すSQLステートメントを作成したいと考えています。

これは私がどれくらい手に入れているのか、私は立ち往生しています。私が作った声明は意味をなさない。ここで

DECLARE @Appraisal_ID_Param INTEGER 
SET @Appraisal_ID_Param = ? 

SELECT * 
FROM [Appraisal] 
RIGHT JOIN [Plan] 
ON 
    [Plan].[Plan_ID] = [Appraisal].[Plan_ID] AND 
    [Appraisal].[Appraisal_ID] != @Appraisal_ID_Param; 

は私のデータベースモデルの一部です:

database model

基本的に、私は@Appraisal_ID_Paramではありませんが、同じPlan_IDを共有するこれらの鑑定を返却する必要があります。

私はかなり長い間この問題に悩まされていたので、私は十分明確であることを本当に願っています。それはむしろ混乱しています。

+3

ここから始めるのが最適です。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

答えて

2

あなたは二度のためAppraisalに参加する必要があります。このような

DECLARE @Appraisal_ID_Param INTEGER 
SET @Appraisal_ID_Param = ? 

SELECT DISTINCT A_TO.* 
FROM [Appraisal] A_FROM 
RIGHT JOIN [Appraisal] A_TO 
ON 
    [A_FROM].[Plan_ID] = [A_TO].[Plan_ID] AND 
    [A_TO].[Appraisal_ID] != @Appraisal_ID_Param 
WHERE 
    [A_FROM].[Appraisal_ID] = @Appraisal_ID_Param 
+1

私はあなたの声明を試してみましたが、完璧に動作します。どうもありがとう! – RubbelDieKatz

1

何か?

DECLARE @Appraisal_ID_Param INTEGER 
SET @Appraisal_ID_Param = ? 

SELECT top 1 * 
FROM Appraisal 
where 
    plan_id = (select plan_id 
       from Appraisal 
       where Appraisal_ID = @Appraisal_ID_Param 
       ) 
    and Appraisal_ID <> @Appraisal_ID_Param 
2

どうやら1つの鑑定は、あなたが最初のパラメータとして、あなたが持っているAppraisalIdに基づいて、その計画のIDを検索し、同じPlanIdを持っているのみ鑑定を選択できることを意味してデータベースに1つの計画を、持っていますが、 AppraisalIDは、パラメータと異なります。

関連する問題