2016-01-18 5 views
1

Я пытаюсь создать запрос, чтобы я мог показать столбец Y/N, если определенный элемент был заказан для группы заказов. Элемент, который я ищу, будет OLI.id = '538'.Показать столбец Y/N, если запись найдена в таблице подробностей

Так что мои результаты будут:

Order#, Customer#, FreightPaid 
12345, 00112233, Y 
12346, 00112233, N 

Я не могу понять, если мне нужно использовать подзапрос или где существует функция?

Вот мой текущий запрос:

SELECT distinct 
     OrderID, 
     Accountuid as Customerno 
    FROM [SMILEWEB_live].[dbo].[OrderLog] OL 
    inner join Orderlog_item OLI on OLI.orderlogkey = OL.[key] 
    inner join Account A on A.uid = OL.Accountuid 
    where A.GroupId = 'X9955' 
    and OL.CreateDate >= GETDATE() - 60 

ответ

1

Я хотел бы предложить exists пункт вместо join:

select ol.OrderID, ol.Accountuid as Customerno, 
     (case when exists (select 1 
          from Orderlog_item OLI join 
           Account A 
           on A.uid = OL.Accountuid 
          where OLI.orderlogkey = OL.[key] and A.GroupId = 'X9955' 
         ) 
      then 1 else 0 
     end) as flag 
from [SMILEWEB_live].[dbo].[OrderLog] OL 
where OL.CreateDate >= GETDATE() - 60; 

Это предотвращает пару проблем. Во-первых, повторяющиеся строки, которые возникают при наличии нескольких совпадающих строк (и select distinct, добавляют лишние служебные данные). Во-вторых, недостающие строки, которые возникают, когда вы используете внутреннее соединение вместо внешнего соединения.

+0

Я получаю много результатов для учетных записей, которых нет в группе X9955. Я также не вижу, где он проверяет OL.ID = '538' – MattC

+0

@MattC. , , Добавьте в подзапрос предложение 'where'. –

Смежные вопросы