使用条件标准创建临时表

时间:2013-11-22 18:44:12

标签: sql sql-server select where conditional-statements

我正在尝试从另一个表创建一个临时表,我根据一组条件选择行。许多不同的标准都在“where” - 陈述中。主要根据来自两个不同列(“Värde”和“Adminkontroll”)的标准来选择行。前三个条件是我不希望在Adminkontroll列中有任何具有特定文本的行。最后三个条件是,如果行在Adminkontroll列中有某个文本,我只想选择具有某个值低于特定阈值水平或高于和低于特定阈值水平的那些。我的代码看起来像这样:

    select * into temp1 
    from [StatistikinlamningDataSKL].[dbo].[SKL_AdminKontroll_result] E
    where
            E.Adminkontroll <> 'SKL_admin_KN_annan_AID'
        and E.Adminkontroll <> 'SKL_admin_KN_lararloner'
        and E.Adminkontroll <> 'SKL_admin_KN_specialitet'
        and E.Värde < 90 if E.Adminkontroll IN 'SKL_admin_KN_ldatum'
        and (E.Värde < 50 and E.Värde > 95) if E.Adminkontroll IN 'SKL_admin_KN_tillsvidare'
        and (E.Värde < 5 and E.Värde > 25)if E.Adminkontroll IN 'SKL_admin_KN_timlon'


    select * into temp1 

有没有人对如何编码它有什么想法?我尝试过“cast(case ..)”,但是当我需要这个特定的标准时,我不知道如何编写代码。

非常感谢,

祝你好运, 汉纳斯

2 个答案:

答案 0 :(得分:0)

尝试..

select * into temp1 
from [StatistikinlamningDataSKL].[dbo].[SKL_AdminKontroll_result] E
where
        ( E.Adminkontroll <> 'SKL_admin_KN_annan_AID'
    AND E.Adminkontroll <> 'SKL_admin_KN_lararloner'
    AND E.Adminkontroll <> 'SKL_admin_KN_specialitet'
    AND E.Adminkontroll <> 'SKL_admin_KN_ldatum'
    AND E.Adminkontroll <> 'SKL_admin_KN_tillsvidare'
    AND  E.Adminkontroll <> 'SKL_admin_KN_timlon'
        )
    OR ( E.Värde < 90 AND E.Adminkontroll = 'SKL_admin_KN_ldatum')
    OR ( E.Värde < 50 and E.Värde > 95 AND E.Adminkontroll ='SKL_admin_KN_tillsvidare')
    OR (E.Värde < 5 and E.Värde > 25 AND  E.Adminkontroll = 'SKL_admin_KN_timlon')

答案 1 :(得分:0)

这可能是一种更清晰的方式来组织规则并避免编码错误。

    select * into temp1 
    from [StatistikinlamningDataSKL].[dbo].[SKL_AdminKontroll_result] E
    where 1 = case
      when E.Adminkontroll = 'SKL_admin_KN_annan_AID'                                     then 0
      when E.Adminkontroll = 'SKL_admin_KN_lararloner'                                    then 0
      when E.Adminkontroll = 'SKL_admin_KN_specialitet'                                   then 0
      when E.Adminkontroll = 'SKL_admin_KN_ldatum'      AND E.Värde < 90                  then 1
      when E.Adminkontroll = 'SKL_admin_KN_tillsvidare' AND E.Värde < 50 AND E.Värde > 95 then 1
      when E.Adminkontroll = 'SKL_admin_KN_timlon'      AND E.Värde < 5  AND E.Värde > 25 then 1
      else 0
    end