0

I am trying to write some code but it doesn't work. It only those TypeT description. How can I display the TypeT and TypeS condition for below case?

DECLARE @PaymentType VARCHAR(20) = '';

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

SELECT * 
FROM LIST 
WHERE LISTID IN  (@PaymentType)
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
user3835327
  • 1,194
  • 1
  • 14
  • 44

4 Answers4

2

Try the below

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

Or you can use the below in only 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, ',')  )
Azar
  • 1,852
  • 15
  • 17
1

Try:

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

However, I think that this is still too complex. Have you tried:

SELECT *
FROM LIST WHERE LISTCONFIG IN ('TypeT','TypeS')
Peter Smith
  • 5,528
  • 8
  • 51
  • 77
1

If you want to do it using IN, you'll have to do it with dynamic SQL. This also means creating the comma separated string. Which is doable, but an easier way is this:

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
HoneyBadger
  • 14,750
  • 3
  • 34
  • 48
1

Another sollution is using dynamic strings. If your sql version is below 2016

DECLARE @PaymentType VARCHAR(20)
SELECT @PaymentType= isnull(@PaymentType+',','')+LISTID FROM list WHERE LISTID IN ('TypeT','TypeS')
exec('SELECT * FROM LIST WHERE LISTID IN  ('+@PaymentType+')')
Pasetchnik
  • 318
  • 1
  • 9