2013-11-22 76 views
0

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

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 ..)”,但当我需要这个特定的标准时,不知道如何编码。

很多感谢,

最好的问候, 汉纳斯

+0

感谢您的回复。但即使在我的描述中我可能已经模糊了,但它仍然是正确的,我想选择低于50或高于95的值。在数据中,这对应于数据库中应该不正确的所有值。 – user2995808

回答

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') 
+0

工程就像一个魅力,非常感谢!周末愉快:) – user2995808

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 
+0

感谢您的参与,我非常喜欢这个结构。不过,不过,代码只返回了正确行数的一小部分。周末愉快! – user2995808