如何基于单个行的多个列值派生列

时间:2016-09-27 10:34:02

标签: sql-server

我目前在尝试创建计算时出现问题。

所以我有8列,所有列都有相同的3个值:

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

这似乎是一个简单的计算,但我一直在border跳过边界逻辑,因为8列中的任何一列都可能有' 2'?

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

如果您的列只有1,2或3,那么您可以试试这个

var webpack = require('webpack');
var path = require('path');

module.exports = {
  context: path.join(__dirname, "src"),
  devtool: "inline-sourcemap",
  entry: "./js/client.js",
  module: {
    loaders: [
      {
        test: /\.js?$/,
        exclude: /(node_modules|bower_components)/,
        loader: 'babel-loader',
        query: {
          presets: ['react', 'es2015', 'stage-0'],
          plugins: ['react-html-attrs', 'transform-decorators-legacy'], 
        }
      }
    ]
  },
  output: {
    path: __dirname + "/src/",
    filename: "client.min.js"
  }
};

答案 1 :(得分:0)

您可以简单地计算8列的总数,如果该值大于9,则表示失败。假设8列中没有NULL或0值。

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

答案 2 :(得分: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