2013-11-22 119 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