2015-12-04 2 views
1

У меня есть запрос, написанный ниже.multiple Как выражение в sql-запросе с использованием case exprssion

SELECT T1.[AcctCode],T1.[Segment_0],SUM(T0.[DebLTotal]) AS BUDGET, SUM(T3.[Debit]) AS DEBIT, 
     AcctName = CASE WHEN T1.[Segment_0] LIKE '6001%%' THEN 'Operating Cost' 
         WHEN T1.[Segment_0] LIKE '6002%%' THEN 'Operating Cost' 
         WHEN T1.[Segment_0] LIKE '6003%%' THEN 'Operating Cost' 
         WHEN T1.[Segment_0] LIKE '6004%%' THEN 'Operating Cost' 
         WHEN T1.[Segment_0] LIKE '6005%%' THEN 'Operating Cost' 
         WHEN T1.[Segment_0] LIKE '6006%%' THEN 'Operating Cost' 
     ELSE T1.[AcctName] END 
FROM OBGT T0 INNER JOIN OACT T1 ON T0.[AcctCode]=T1.[AcctCode] INNER JOIN OBGS T2 
ON T0.[Instance] = T2.[AbsId] INNER JOIN JDT1 T3 ON T1.[AcctCode] = T3.[Account] INNER JOIN OASC T4 ON T1.[Project]=T4.[Code] 
where T1.[Segment_0] like '60%%' 
GROUP BY T1.[AcctCode],T1.[Segment_0],T1.[AcctName] 

Этот запрос дает мне разные значения эксплуатационных расходов. Мне нужно что-то вроде WHEN T1.[Segment_0] LIKE '6002%%,6003%%,6004%%' THEN 'Operating Cost'. Является ли это возможным? Мне не нужны разные предпочтения по одному. Мне нужно все в одном, как эксплуатационные расходы. Пожалуйста, помогите мне за это.

+0

Пожалуйста, отредактируйте свой вопрос и укажите образцы данных и желаемые результаты. Непонятно, что вы пытаетесь сделать. –

+0

Простыми словами, если сегмент_0 начинается с 6, то имя учетной записи должно быть операционным. Я получаю несколько строк, поскольку я делаю случаи до «6006». Мне нужна только одна строка. @GordonLinoff – Kirat

+1

Подождите, что, мы действительно говорим «начинается с 6»? Как в 'LIKE '6%' 'было бы достаточно? –

ответ

1

Если T1.[Segment_0] только числовое значение, которое вы можете использовать этот синтаксис с between:

case when substring(T1.[Segment_0], 1, 4) between 6001 and 6006 then 'Operating Cost' else T1.[AcctName] end 

Иначе вы можете использовать IN:

case when substring(T1.[Segment_0], 1, 4) in ('6001','6002','6003','6004','6005','6006') then 'Operating Cost' else T1.[AcctName] end 
3

Возможно, вы выпускаете то, что вы указываете AcctName в group by, а не результат case. Возможно, это делает то, что вы хотите:

SELECT T1.[AcctCode],T1.[Segment_0],SUM(T0.[DebLTotal]) AS BUDGET, SUM(T3.[Debit]) AS DEBIT, 
     AcctName = (CASE WHEN T1.[Segment_0] LIKE '6001%%' THEN 'Operating Cost' 
         WHEN T1.[Segment_0] LIKE '6002%%' THEN 'Operating Cost' 
         WHEN T1.[Segment_0] LIKE '6003%%' THEN 'Operating Cost' 
         WHEN T1.[Segment_0] LIKE '6004%%' THEN 'Operating Cost' 
         WHEN T1.[Segment_0] LIKE '6005%%' THEN 'Operating Cost' 
         WHEN T1.[Segment_0] LIKE '6006%%' THEN 'Operating Cost' 
        ELSE T1.[AcctName] END) 
FROM OBGT T0 INNER JOIN OACT 
    T1 
    ON T0.[AcctCode]=T1.[AcctCode] INNER JOIN 
    OBGS T2 
    ON T0.[Instance] = T2.[AbsId] INNER JOIN 
    JDT1 T3 
    ON T1.[AcctCode] = T3.[Account] INNER JOIN 
    OASC T4 
    ON T1.[Project] = T4.[Code] 
where T1.[Segment_0] like '60%%' 
GROUP BY T1.[AcctCode], T1.[Segment_0], 
     (CASE WHEN T1.[Segment_0] LIKE '6001%%' THEN 'Operating Cost' 
       WHEN T1.[Segment_0] LIKE '6002%%' THEN 'Operating Cost' 
       WHEN T1.[Segment_0] LIKE '6003%%' THEN 'Operating Cost' 
       WHEN T1.[Segment_0] LIKE '6004%%' THEN 'Operating Cost' 
       WHEN T1.[Segment_0] LIKE '6005%%' THEN 'Operating Cost' 
       WHEN T1.[Segment_0] LIKE '6006%%' THEN 'Operating Cost' 
       ELSE T1.[AcctName] 
      END); 

EDIT:

Вы также хотите удалить Segment_0 с обеих select и group by. Без данных образца трудно сказать.

+0

Мне нужно AcctName = (CASE WHEN T1. [Segment_0] LIKE '6001 %% и 6002 %%, 6003 %%' THEN 'Operating Cost'). Мне нужна эта вещь. вместо того, чтобы помещать разные LIKE, мне нужен один результат линии. если segment_0, например 6002 %%, 6003 %%, то acctname должно быть операционной стоимостью – Kirat

+0

@ Kirat. , , Ввод 'case' в' group by' * вместо * 'ACCTNAME' должен делать то, что вы хотите. –

2

SQL Server LIKE может сделать pattern matching

Попробуйте CASE WHEN T1.[Segment_0] LIKE '600[123456]%%' THEN 'Operating Cost'

+1

+1. Однако не уверен в сохранении '%%' от исходного вопроса. * Две строки из ноль или более символов? –

+0

с этим я все еще получаю тот же результат. Я поставил под вопрос – Kirat

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