2013-02-13 15 views
0

我有老师的表,9列从数位变量

TeacherID, TeacherName, Reception, Year1, Year2, Year3, Year4, Year5, ALevel 

我需要连接的最小和最大位值(接待 - Year5)选择的最小值和最大值1,然后在选择显示它语句,所以它的输出为(在这种情况下,第1年,第2年和第3年被勾选):Y1 - Y3。

SELECT 
    TeacherID, TeacherName, 
    Reception + Year1 + Year2 + Year3 + Year4 + Year5 + ALevel as 'KeyStage' 
FROM Teachers 

有关如何做到这一点的任何想法?

非常感谢,马特

回答

2
SELECT 
    TeacherID, 
    TeacherName, 
    CASE 
     WHEN Reception > 0 THEN 'Re' 
     WHEN Year1 > 0 THEN 'Y1' 
     WHEN Year2 > 0 THEN 'Y2' 
     WHEN Year3 > 0 THEN 'Y3' 
     WHEN Year4 > 0 THEN 'Y4' 
     WHEN Year5 > 0 THEN 'Y5' 
     WHEN ALevel > 0 THEN 'AL' 
     ELSE '' END 
    + ' - ' + 
    CASE 
     WHEN ALevel > 0 THEN 'AL' 
     WHEN Year5 > 0 THEN 'Y5' 
     WHEN Year4 > 0 THEN 'Y4' 
     WHEN Year3 > 0 THEN 'Y3' 
     WHEN Year2 > 0 THEN 'Y2' 
     WHEN Year1 > 0 THEN 'Y1' 
     WHEN Reception > 0 THEN 'Re' 
     ELSE '' END AS Range 
FROM 
    Teachers 
+0

完美,谢谢。 – dynamicuser 2013-02-13 15:11:05

3

试试这个; First CaseReception起始MinYearSecond CaseALevel起始MaxYear。另外补充else针对每一种情况下,以避免越来越空,如果他们都不是1

SELECT TeacherID, TeacherName, Reception, 
     Case when Reception = 1 then 'R' 
      when Year1 = 1 then 'Y1' 
      ... 
      when ALevel = 1 then 'AL' 
      else '' 
     End + ' - ' 
     Case when ALevel = 1 then 'AL' 
      when Year5 = 1 then 'Y5' 
      ... 
      when Reception= 1 then 'R' 
      else '' 
     End As KeyStage 
FROM Teachers 
+0

您好@Beth,感谢您纠正错字。 – Kaf 2013-02-13 17:25:31

0

我不会。在你的客户端代码中执行(php,c#)。你的规范也不清楚,如果选择第1,3和5年,而第2和第4年则不是?

+0

上述情况不会发生,如果教师介于1年级和4年级之间,教师可以在3年级工作,天气3年是否打勾。感谢您的建议。 :) – dynamicuser 2013-02-13 15:12:10

0

这应该适合你,我没有测试过它,你可能需要做一些改变。请注意,如果没有检查位,则会得到一个空值。我会使用空值,因为如果没有检查到任何东西,那么你就不会有这个奇怪的短划线,并且你可以使用isnull将值更改为你所希望的未选择年份。

SELECT TeacherID, 
    TeacherName, 
    case when Reception = 1 then 'R' 
     when Year1 = 1 then 'Y1' 
     when Year2 = 1 then 'Y2' 
     when Year3 = 1 then 'Y3' 
     when Year4 = 1 then 'Y4' 
     when Year5 = 1 then 'Y5' 
     when ALevel = 1 then 'AL' 
     else null end + ' - ' + 
    case when Reception = 1 then 'R' 
     when Year1 = 1 then 'Y1' 
     when Year2 = 1 then 'Y2' 
     when Year3 = 1 then 'Y3' 
     when Year4 = 1 then 'Y4' 
     when Year5 = 1 then 'Y5' 
     when ALevel = 1 then 'AL' 
     else null end as 'KeyStage' 
FROM Teachers