2016-04-18 2 views
0

Я пытаюсь это в Microsoft SQL Server:случае, когда запрос Exists не работает

SELECT DISTINCT 
    a.InteractionID, 
    a.Program, 
    a.[Client Name], 
    CASE 
     WHEN EXISTS (
      SELECT * 
      FROM [Interaction Behaviors] 
      JOIN Behaviors 
       ON [Interaction Behaviors].BehaviorID = Behaviors.BehaviorID 
      JOIN Interactions 
       ON Interactions.InteractionID = [Interaction Behaviors].InteractionID 
      WHERE 
       [Interaction Behaviors].InteractionID = Interactions.InteractionID 
       AND Behaviors.BehaviorID = 1 
      ) 
       THEN 1 
     ELSE 0 
     END AS 'Alcohol/Drug Use By Client', 
    CASE 
     WHEN EXISTS (
      SELECT * 
      FROM [Interaction Behaviors] JOIN 
      Behaviors 
       ON [Interaction Behaviors].BehaviorID = Behaviors.BehaviorID 
      JOIN Interactions 
       ON Interactions.InteractionID = [Interaction Behaviors].InteractionID 
      WHERE 
       [Interaction Behaviors].InteractionID = Interactions.InteractionID 
       AND Behaviors.BehaviorID = 5 
      ) 
       THEN Behavior 
     ELSE '' 
    END AS 'Allegation--Text', 
    c.InterventionID, 
    d.Intervention ASIntervention_Name 
FROM (
    (
     [Interactions Query] AS a 
     INNER JOIN [Interaction Interventions] AS c 
      ON a.InteractionID = c.InteractionID 
    ) 
LEFT JOIN Interventions AS d 
    ON c.InterventionID = d.InterventionID 

Первый Case оператор выполняет отлично.

Проблема заключается во втором описании Cas e, где я не просто хочу 1 или 0, а фактический текст.

Для этого один, я получаю сообщение об ошибке:

Msg 207, уровень 16, состояние 1, строка 19 недопустимое имя столбца 'Поведение'

Behavior столбец в [Interaction Behaviors] Таблица.

Я понимаю, что мне нужно явно присоединиться к таблице [Interaction Behaviors] в инструкции from. Тем не менее, это дает мне нечетные дублированные строки, поэтому мне нужно позаботиться об этом в Case.

Спасибо за внимание!

+1

Ваши круглые скобки являются несбалансированными, не говоря уже о том, что запрос не может быть прочитан прямо сейчас. –

+1

Вы не можете получить доступ к столбцу 'Behavior' из подзапроса, который содержит этот столбец. он находится в '(SELECT * FROM [Interaction Behaviors] JOIN Behaviors ON [Interaction Behaviors] .BehaviorID = Behaviors.BehaviorID JOIN Взаимодействия на Interactions.InteractionID = [Interaction Behaviors] .InteractionID WHERE [Interaction Behaviors] .InteractionID = Interactions.InteractionID AND Behaviors.BehaviorID = 5) ' –

+0

Возможно, вы не знаете о своих подзапросах, не связанных с вашими основными записями. То есть в ваших подзапросах вы не ссылаетесь на таблицу a, c или d. Либо существует запись Behaviors с BehaviorID = 1, то вы показываете 1 для всех выбранных записей, иначе это не так, и вы показываете 0 для всех строк. Поэтому, возможно, вы должны сообщить нам, что запрос * предполагается * делать. –

ответ

1

Заменить поведение на код ниже

       ( SELECT Behavior 
           FROM [Interaction Behaviors] JOIN 
           Behaviors 
           ON [Interaction Behaviors].BehaviorID = Behaviors.BehaviorID 
           JOIN Interactions 
           ON Interactions.InteractionID = [Interaction Behaviors].InteractionID 
           WHERE 
           [Interaction Behaviors].InteractionID = Interactions.InteractionID 
           AND Behaviors.BehaviorID = 5 
           ) 
+0

Спасибо ... это самый близкий я получил, но я получил сообщение об ошибке: Msg 512, Level 16, State 1, Line 3 Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <= , >,> = или когда подзапрос используется как выражение. – WixLove

+0

Еще раз спасибо. Я не уверен, почему он не работал в первый раз, но теперь он работает. Спасибо за помощь. – WixLove

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