2017-10-12 9 views
2

T-SQL変数が定義されていて、別のテーブルのselect top 3がwhereとorder byを持っています。私が達成しようとしているのは、変数がselect top 3ステートメントから返された値が存在するかどうかを判断することです。私はこれを何時間も見つけたので、私が必要とするものを解決することができないようです。トップ3のT-SQL変数select

以下は私が今までに持っているものです。どのように希望の結果を達成するための助けや、どこにでも見えるように私に指示を与えることは非常に高く評価されます。

DECLARE @binVar BINARY(64) 

SET @binVar = 0xD9B1E89669FF2991EA880897A45EDB68EC11E5638D09DF4DB396CF10A77E6EE940D1A1ECB86598746B1A1C0D91D7955ACFB11BFFE98D36C6FBC5CC73CBA9B158 

SELECT TOP 3 * 
FROM tbl2 
WHERE ID2 = (SELECT tbl1.Field1 
      FROM tbl1 
      WHERE tbl1.Field2 = @User) 
ORDER BY ID DESC 
+1

はSO質問をし、答えを得るための素晴らしいサイトです:だけにしてください完全な[MCVE](https://stackoverflow.com/help/mcve)を提供してください。質問をする前に[最初にアヒルと話をする](https://blog.codinghorror.com/rubber-duck-problem-solving/)を検討してください。そうです。私は本気です!私たちのお手伝いをするために、サンプルデータと期待される結果を生成してください。 [ascii table](https://ozh.github.io/ascii-tables/)は、出力を読みやすくします!データをモックアップすると、SQLはhttp://rextester.com/または類似のサイトを使用して試してみることもできます。かなり多くのことが可能です。それは私たちがそれをするべきかどうかの問題です。私たちはできません。 – xQbert

+1

あなたの変数は '@ binVar'と呼ばれますが、' SET'コマンドは別の変数 '@ Pass'を設定します。後であなたのコードで使われることはありません......この質問は、全く意味がありません...... –

+0

xQBert、私は正確なコードと変数の値を英国のDPAの下で機密情報として提供することができません。私はラバーアヒルの方法を試してみましたが、rextesterに関してはコーディング自体ではありませんが、私は難しかったのですが、望ましい結果を得るための論理についてです。 –

答えて

1

まず第一に、これを試してみてください (この値が存在することができる場合)TOP 3 yourfieldであなたのTOP 3 *を変更:

SELECT 
CASE 
    WHEN @binVar in (
     SELECT TOP 3 yourfield 
     FROM tbl2 
     WHERE ID2 = (SELECT tbl1.Field1 
     FROM tbl1 
     WHERE tbl1.Field2 = @User) 
     ORDER BY ID DESC) THEN 'EXISTS' 
    ELSE 'NOT EXISTS' 
END 
+0

これはまさに私が探していたものです。ありがとうございました –

+0

@JBいいですね;) –

+1

繰り返し使用するには、実際にTOPステートメントにORDER BYを含める必要があります。そうしないと、統計の更新によって結果が変更される可能性があります。 –