SQL запрос — ОПЕРАТОР CASE возвращает 2 или более строк — для выбора одного значения из них

#sql-server

#sql-server

Вопрос:

Этот подзапрос является частью большого запроса.

     ...
    CASE WHEN tx.call_id IS NULL THEN 0 ELSE 1 END AS 'Transfer', 
    CASE WHEN AT.VALUE IS NULL THEN 
       (
        SELECT top 1 product_type FROM [mci].[dbo].[f3_leads_file] WHERE alt_id = '00'   
           calls.memberid 
        UNION 
        SELECT top 1 'DGU' AS product_type FROM [dbo].[stg_call_routing_data] WHERE alt_id = 
        calls.memberid
       ) 
   ELSE AT.VALUE END AS product_type 
   FROM dbo.cust_call_data AS calls 
    ... 
 

Обратите внимание на 2-й оператор case, который имеет ОБЪЕДИНЕНИЕ.

 SELECT top 1 product_type FROM [mci].[dbo].[f3_leads_file] WHERE alt_id = '00'   
               calls.memberid 
 

Первый select может возвращать product_type как один из следующих: «DGU», «MYW» или «HUA».

Мы хотим, чтобы этот первый выбор возвращал HUA, а затем использовал это (оно имеет приоритет). Если возвращаемое значение равно MYW, тогда используйте DGU, иначе используйте DGU.

Я думаю, что ОБЪЕДИНЕНИЕ здесь вообще не помогает, и я должен изменить его на приведенный ниже код (но тогда как мне с этим справиться, когда значение равно MYW).

 ...
    CASE WHEN tx.call_id IS NULL THEN 0 ELSE 1 END AS 'Transfer', 
    CASE WHEN AT.VALUE IS NULL THEN 
        SELECT top 1 product_type FROM [mci].[dbo].[f3_leads_file] WHERE alt_id = '00'   
           calls.memberid 
         
   ELSE AT.VALUE END AS product_type 
   FROM dbo.cust_call_data AS calls 
    ... 
 

Ответ №1:

На основе приведенных ниже инструкций:

Первый select может возвращать product_type как один из следующих: «DGU», «MYW» или «HUA».

Мы хотим, чтобы этот первый выбор возвращал HUA, а затем использовал это (оно имеет приоритет). Если возвращаемое значение равно MYW, тогда используйте DGU, иначе используйте DGU.

Вы хотите вернуть HUA , когда тип продукта HUA во всех остальных случаях возвращается DGU

 CASE WHEN AT.VALUE IS NULL THEN (
    SELECT TOP 1 IIF(product_type = 'HUA', 'HUA', 'DGU')
    FROM [mci].[dbo].[f3_leads_file] 
    WHERE alt_id = '00'   calls.memberid 
 )
 

Комментарии:

1. Спасибо. Я попробую это.