2017-06-06 31 views
0

いくつかのコードを記述しようとしていますが、動作しません。それはTypeTの説明だけです。どのようにしてTypeTTypeSの状態を表示できますか?"IN"条件を使用してSQL文にdeclared variableを使用する方法

DECLARE @PaymentType VARCHAR(20) = ''; 

SELECT @PaymentType = LISTID 
FROM LIST 
WHERE LISTCONFIG IN ('TypeT', 'TypeS') 

SELECT * 
FROM LIST 
WHERE LISTID IN (@PaymentType) 
+0

ありがとうございました。 – user3835327

答えて

2

SELECT * FROM LIST 
WHERE LISTID IN (select LISTID FROM LIST WHERE LISTCONFIG IN 'TypeT','TypeS')) 

それともだけSQL Serverの2016

DECLARE @PaymentType VARCHAR(20) 
SELECT @PaymentType= isnull(@PaymentType+',','')+LISTID FROM list WHERE LISTID IN ('TypeT','TypeS') 
SELECT * FROM LIST WHERE LISTID IN (select value from STRING_SPLIT(@PaymentType, ',') ) 
+0

こんにちは、申し訳ありませんが、私は変数が他の目的のためにその変数を使用することができます。 – user3835327

+0

変数を使用して一度に1つしか実行できない場合や、区切り文字を区切り文字で保存してから、区切り文字または動的SQLに基づいて分割する必要があります。 – Azar

+0

返信いただきありがとうございます。私は解決策を見つけました! – user3835327

1

の試みを以下を使用することができます以下試してみてください。しかし、私はこのことを考える

SELECT * 
FROM LIST 
WHERE 
    LISTID IN (SELECT LISTID FROM LIST WHERE LISTCONFIG IN ('TypeT','TypeS')) 

を依然として複雑すぎる。あなたは試してみました:

SELECT * 
FROM LIST WHERE LISTCONFIG IN ('TypeT','TypeS') 
+0

返信いただきありがとうございます。私は解決策を見つけました! – user3835327

1

あなたがINを使用してそれを実行したい場合は、動的SQLでそれを行う必要があるでしょう。これは、コンマ区切りの文字列を作成することも意味します。これは実行可能ですが、より簡単な方法は次のとおりです。

DECLARE @PaymentType TABLE (ListID INT) ; 

INSERT @PaymentType (ListID) 
SELECT LISTID FROM LIST WHERE LISTCONFIG IN ('TypeT','TypeS') 

SELECT LST.* 
FROM LIST Lst 
JOIN @PaymentType AS PT 
    ON PT.ListID = Lst.ListID 
+0

返信いただきありがとうございます。私は解決策を見つけました! – user3835327

1

もう1つの解決策は動的文字列を使用することです。あなたのSQLバージョンが2016未満の場合

DECLARE @PaymentType VARCHAR(20) 
SELECT @PaymentType= isnull(@PaymentType+',','')+LISTID FROM list WHERE LISTID IN ('TypeT','TypeS') 
exec('SELECT * FROM LIST WHERE LISTID IN ('[email protected]+')') 
+0

返信いただきありがとうございます。私は解決策を見つけました! – user3835327