У меня есть таблица ниже.
# Company CardType ErrorCode
------------------------------------------
1 JPMorgan Visa 01
2 JPMorgan NULL 01
3 BoA Visa 01
4 BoA Visa 02
5 Citigroup MasterCard 01
У нас есть три поля, и поле CardType имеет значение NULL.Что я хочу сделать, это найти правильное соответствие.Например, если я перейду к запросу:
(JPMorgan, Visa, 01) it should match record 1.
Но вместо Visa я передам что-нибудь еще для JPMorgan под CardType, он должен сопоставить общую запись с типом карты NULL.Как показано ниже.
(JPMorgan, MasterCard, 01) it should match record 2.
(JPMorgan, Chase, 01) it should match record 2.
(JPMorgan, NULL, 01) it should match record 2.
Как мне добиться этого?
DECLARE
@Company nvarchar(50)
@CardType nvarchar(50) = NULL
@ErrorCode nvarchar(50)
SET
@Company = 'JPMorgan'
@CardType = NULL
@ErrorCode = '01'
SELECT * FROM Bank
WHERE Company = @Company
AND (@CardType IS NULL OR CardType = @CardType)
AND ErrorCode = @ErrorCode
Это то, что я получил, однако, это не правильно, потому что когда я передаю (JPMorgan, NULL,01) возвращает неверный результат.Может кто-нибудь, пожалуйста, помогите мне с этим.Мне сказали, что я должен использовать PARTITION и GROUP BY OR ROW_NUMBER, чтобы это работало, но я не слишком уверен.