2016-09-27 11 views
0

現在、作成しようとしている計算に問題があります。以下、私が述べるます新しい列を計算できるようにする必要があり単一行の複数の列の値に基づいて列を派生する方法

1 = pass , 2 = borderline , 3 = Fail. 

Pass = All 8 fields equals '1' 
Borderline = 7 Fields that equal '1' with one field that equals '2' 
Else Fail 

は、それはそう

は、だから私は8列、同じ3つの値を持つすべてを持っています簡単な計算ができますが、私は境界線の論理につきものを上げ続けています.8つの列のどれでも '2'を持つことができますか?

ご協力いただければ幸いです。

+0

何か試しましたか? – Arti

答えて

1

あなたの列が唯一の1,2または3、あなたはあなたが簡単な計算8列の合計、および値は、それが失敗だ9より大きい場合でしこの

case Col1 + Col2 + Col3 + Col4 + Col5 + Col6 + Col7 + Col8 When 8 Then 'Pass' 
when 9 Then 'Borderline' 
Else 'Fail' 
End 
0

を試すことができますがあります場合。これは、8カラムにNULL値も0値もないことを前提としています。

SELECT Col1 + Col2 + Col3 + Col4 + Col5 + Col6 + Col7 + Col8 AS Total 
0

あなたはこれを仕事にCASE文を使用して、単純な加算を使用することができます。

ルール:

  • 8パス:合計は常に= 8
  • 7を通過し、1つのボーダーライン:

    :常に= 9
  • 任意の他の組み合わせは=

サンプルコードを失敗

-- dummy table 
CREATE TABLE #temp 
    (
     c1 INT , c2 INT , c3 INT , c4 INT , 
     c5 INT , c6 INT , c7 INT , c8 INT 
    ) 

-- dummy data  
INSERT INTO #temp 
     (c1 , c2 , c3 , c4 , 
      c5 , c6 , c7 , c8 
     ) 
SELECT 1,1,1,1,1,1,1,1 
UNION ALL 
SELECT 1,1,1,1,1,1,2,1 
UNION ALL 
SELECT 1,2,3,1,1,1,1,2 

-- query to calculate totals and pass/fail 
SELECT *, 
    CASE t.Total WHEN 8 THEN 'Pass' 
       WHEN 9 THEN 'Border Line' 
       ELSE 'Fail' END Overall 
FROM (SELECT * , 
        c1 + c2 + c3 + c4 + c5 + c6 
        + c7 + c8 Total 
      FROM  #temp 
     ) t 
-- clean up 
DROP TABLE #temp 

生産数:

c1 c2 c3 c4 c5 c6 c7 c8 Total Overall 
1 1 1 1 1 1 1 1 8  Pass 
1 1 1 1 1 1 2 1 9  Border Line 
1 2 3 1 1 1 1 2 12  Fail 
関連する問題