2015-11-20 9 views
1

У меня есть запрос, который написан ниже. сначала просмотрите этот запрос.Как использовать Not Equal с оператором CASE в SQL-запросе

SELECT 
    T3.[AcctName], 
    SUM(T0.[DebLTotal]/85) AS buget,(Select sum(T3.[Debit]/85) From JDT1 T3) as 'CurrentBudget' 
FROM 
    OBGT T0 
INNER JOIN 
    (SELECT 
     CASE 
      WHEN T1.[AcctName] LIKE '%Salaries%' THEN 'Salaries' 
      WHEN T1.[AcctName] LIKE '%Travel%' THEN 'Travel' 
      WHEN T1.[AcctName] LIKE '%Supplies%' THEN 'Supplies' 
      WHEN T1.[AcctName] LIKE '%Consultants%' THEN 'Consultants' 
      WHEN T1.[AcctName] LIKE '%Patient%' THEN 'Patient Care' 
      WHEN T1.[AcctName] LIKE '%Equipment%' THEN 'Equipments' 
      WHEN T1.[AcctName] LIKE '%Expense%' THEN 'Other Expenses' 
      WHEN T1.[AcctName] LIKE '%Alteration%' THEN 'Alterations/Renovations' 
      ELSE 'Alterations/Renovations' 
     END as [AcctName], 
     [AcctCode] 
    FROM 
     OACT AS T1) AS T3 ON T0.[AcctCode] = T3.[AcctCode] 
INNER JOIN 
    OBGS T2 ON T0.[Instance] = T2.[AbsId] 
WHERE 
    T2.[Name] = 'Main Budget 2015' 
GROUP BY 
    T3.[AcctName], T2.[Name] 

В этом запросе вы можете увидеть случаи. Мне нужен другой столбец, для этого, если AcctName не соответствует ни одному из них, которые определены в случаях, тогда должен быть другой столбец, например «Other Expenses» .eg, поскольку вы можете видеть все псевдонимы, например WHEN T1. [AcctName] LIKE '% Зарплата%' THEN «Зарплаты» и все такое. Я хочу что-то, если T1. [AcctName]! =% Зарплаты%,% Консультанты%,% Расходы% и т. д. тогда это должно быть как «Другое расходование». Я не знаю, как это получить. Пожалуйста, эксперты помогут мне в этом.

+1

Не получите ваш вопрос, в чем проблема? – pedram

+0

Нет описания дела, просто выражение case ... – jarlh

+0

Редизайн вашей базы данных, добавьте таблицу cost_categories, в которой хранятся все эти категории. – jarlh

ответ

2

Если вы разместите его в состоянии ELSE, он работает !!!

ELSE 'Other Expenses' 

В конечном счете это показывает тот же результат, используете ли вы NOT Equal или ELSE с вашим запросом.

Все еще, если вы счастливы использовать NOT EQUAL внутри корпуса ... используйте это <> Оператор.

Дополнительные задания ... смотрите следующую ссылку

https://social.msdn.microsoft.com/forums/sqlserver/en-US/0dff067e-7b8d-4b74-b123-978683caee0a/using-a-not-equal-in-sql-case-expression

+0

Спасибо за помощь. :) – Kirat

3

Или я не понимаю вас, или просто изменить ваш ELSE:

SELECT T3.[AcctName], 
     SUM(T0.[DebLTotal]/85) AS buget,(Select sum(T3.[Debit]/85) From JDT1 T3) as 'CurrentBudget' 
FROM OBGT T0 
INNER JOIN 
    (
    SELECT CASE WHEN T1.[AcctName] LIKE '%Salaries%' THEN 'Salaries' 
       WHEN T1.[AcctName] LIKE '%Travel%' THEN 'Travel' 
       WHEN T1.[AcctName] LIKE '%Supplies%' THEN 'Supplies' 
       WHEN T1.[AcctName] LIKE '%Consultants%' THEN 'Consultants' 
       WHEN T1.[AcctName] LIKE '%Patient%' THEN 'Patient Care' 
       WHEN T1.[AcctName] LIKE '%Equipment%' THEN 'Equipments' 
       WHEN T1.[AcctName] LIKE '%Expense%' THEN 'Other Expenses' 
       WHEN T1.[AcctName] LIKE '%Alteration%' THEN 'Alterations/Renovations' 
       ELSE 'Other Expenses' 
      END as [AcctName], 
      [AcctCode] 
    from OACT AS T1 
    ) as T3 ON T0.[AcctCode] = T3.[AcctCode] 
INNER JOIN OBGS T2 ON T0.[Instance] = T2.[AbsId] 
where T2.[Name] = 'Main Budget 2015' 
GROUP BY T3.[AcctName],T2.[Name] 

Как это?

+0

См. Правки .. Надеюсь, теперь вам будет ясно. @Tiago – Kirat

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