2013-11-13 4 views
0

У меня есть запрос, где я пытаюсь тянуть рейтинги развития сотрудников с 2012 и 2013:SQL случай, когда для различных критериев

SELECT Employee_ID, Meeting_Year, Meeting_Readiness_Rating 
FROM dbo.v_sc17_TMS_Data_Career_Meeting_Rating 
GROUP BY Employee_ID, Meeting_Year, Meeting_Readiness_Rating 

Я пытаюсь настроить случай, когда так тянет 2012 рейтингов INTO одна колонка и 2013 год в другую. Я хотел бы, чтобы это выглядело как

Employee ID  2012 Meeting Rating  2013 Meeting Rating 

Даже если они принимают один в 2012 году, но не в 2013 году я все еще нужны данные для обоих, я с трудом выяснить это. Есть идеи?

ответ

2
SELECT Employee_ID, 
    CASE Meeting_Year WHEN 2012 THEN Meeting_Readiness_Rating ELSE NULL END as [2012 Meeting Rating], 
    CASE Meeting_Year WHEN 2013 THEN Meeting_Readiness_Rating ELSE NULL END as [2013 Meeting Rating] 
FROM dbo.v_sc17_TMS_Data_Career_Meeting_Rating 
GROUP BY Employee_ID, Meeting_Year, Meeting_Readiness_Rating 
+0

Это не объединить их, она разделяет их в отдельные годы. Например, если у них есть рейтинг на 2012 и 2013 год, он перечислит рейтинг на 2012 год и NULL на 2013 год, а затем еще один рекорд с рейтингом на 2013 год и NULL за 2012 год – user2119980

+0

yep, извините, не читал внимательно :) лучший ответ от baltov –

0
SELECT yr_2012.Employee_ID  
     ,yr_2012.Meeting_Readiness_Rating AS [2012_Meeting_Rating] 
     ,yr_2013.Meeting_Readiness_Rating AS [2013_Meeting_Rating] 
FROM dbo.v_sc17_TMS_Data_Career_Meeting_Rating as yr_2012 
     CROSS APPLY (
      SELECT mr.Meeting_Readiness_Rating 
      FROM dbo.v_sc17_TMS_Data_Career_Meeting_Rating as mr 
      WHERE mr.Meeting_Year = '2013' AND 
        yr_2012.Employee_ID = mr.Employee_ID 
     ) yr_2013 
WHERE Meeting_Year = '2012' ; 
+0

Это просто заставляет меня не разобрать текстовую ошибку запроса – user2119980

+0

Попробуйте теперь после моего редактирования. –

+0

Мне нужны 2012 и 2013, хотя, почему вы используете только год собрания = 2013 – user2119980

1
SELECT Employee_ID, sum(r2012) as '2012 Meeting Rating', sum(r2013) as '2013 Meeting Rating' from 
    (SELECT Employee_ID, 
     CASE Meeting_Year WHEN 2012 THEN Meeting_Readiness_Rating ELSE 0 END as r2012, 
     CASE Meeting_Year WHEN 2013 THEN Meeting_Readiness_Rating ELSE 0 END as r2013 FROM dbo.v_sc17_TMS_Data_Career_Meeting_Rating) GROUP BY Employee_ID 
+0

Я получаю ошибку преобразования, когда я запускаю это, пытаясь преобразовать один из фактических оценок от NVARCHAR до INT – user2119980

+0

Если Meeting_Readiness_Rating не является числом, преобразуйте его в число в CASE – baltov

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