2015-10-07 5 views
-1

Следующий код не работает, и он должен быть опечаткой где-то;Операторы case SQL Server 2012 с ошибкой

SELECT  
    ui.ID AS userid, 
    EmpType = CASE 
       WHEN c.id IN (1, 3) 
        THEN 'Public Accounting' 
       WHEN (SELECT COUNT(csc1.id) 
         FROM companies_sic_codes AS csc1 
         WHERE csc1.id = c.id 
         AND csc1.sic_code IN (9100, 9811)) > 0 
        THEN 'Government' 
       WHEN (SELECT COUNT(csc2.id) 
         FROM companies_sic_codes AS csc2 
         WHERE csc2.id = c.id 
         AND csc2.sic_code IN (8930, 8931, 8721, 8742, 8748)) > 0 
        THEN 'Public Accounting' 
       WHEN (SELECT COUNT(csc3.id) 
         FROM companies_sic_codes AS csc3 
         WHERE csc3.id = c.id 
         AND csc3.sic_code = 8932) > 0 
        THEN 'Tax Consulting' 
       WHEN (SELECT COUNT(csc4.id) 
         FROM companies_sic_codes AS csc4 
         WHERE csc4.id = c.id 
         AND csc4.sic_code IN (8100, 8111)) > 0 
        THEN 'Law Firms' 
       WHEN (SELECT COUNT(csc5.id) 
         FROM companies_sic_codes AS csc5 
         WHERE csc5.id = c.id 
         AND csc5.sic_code IN (8211, 8220, 8221, 8222)) > 0 
        THEN 'Academia' 
       ELSE 'Corporate In-House' 
      END 
FROM   
    dbo.Companies AS c 
INNER JOIN 
    dbo.Users_Info AS ui ON c.ID = ui.Current_Company_Number 
WHERE  
    (ui.ID = 36075) 

users_info колонна current_company_number для пользователя 36075 является 26910. companies_sic_codes стола для компании 26910 имеет три строки и sic_codes из 7361, 7361 и 7363. Я не думаю, что дубликат sic_code 7361 может вызвать проблемы. на самом деле; Я удалил эту строку и получил те же результаты.

Результат:

userid  EmpType 
36075  'Law Firms' 

Я должен быть Corporate In-House

EDIT

Если я удалить "когда то 'юридические фирмы'" я получаю правильные результаты.

+0

Возможно ли, что вы перепутали номер компании? Может, 29610 или что-то еще? Вы рассуждаете правильно. – shawnt00

+1

Не соответствует ли 'company_sic_codes.id' неправильный столбец? – shawnt00

ответ

1

Я подозреваю, что у вас есть столбец идентификатора компании в csc, в котором вы должны присоединиться, а не id. Я также переписал ваш запрос в форме, которая позволяет избежать всех подзапросов внутри выражения case.

select 
    ui.id, 
    case min(
     case 
      when csc.sic_code in (9100, 9811) then 1 
      when csc.sic_code in (8930, 8931, 8721, 8742, 8748) then 2 
      when csc.sic_code in (8932) then 3 
      when csc.sic_code in (8100, 8111) then 4 
      when csc.sic_code in (8211, 8220, 8221, 8222) then 5 
      else 6 
     end) 
     when 1 then 'Government' 
     when 2 then 'Public Accounting' 
     when 3 then 'Tax Consulting' 
     when 4 then 'Law Firms' 
     when 5 then 'Academia' 
     when 6 then 'Corporate In-House' 
    end 
from 
    dbo.Users_Info as ui 
    inner join dbo.Companies as c 
     on c.id = ui.Current_Company_Number 
    inner join companies_sic_codes as csc 
     on csc.id = c.id 
where 
    ui.id = 36075 
group by ui.id 
+0

Вы правы. Я закончил тем, что использовал выше, чем вы. Благодаря! – user990016