2017-12-03 34 views
0

この特定のテーブルで最も多くのものを含む行を見つける必要があります。 テーブルはそのように見え、私の出力は与えられたテーブルの真上に表示されます。SQL:特定の値の最大値を持つ行を見つける方法

Table and the desired output

私はまだので、多分解決するのは簡単ですが、私は今のところすべてのソリューションを取得できませんでしたSQLに慣れていませんよ。

特定の値を検索し、見つかった値を合計して、出力を余分な列で指定する必要がありますか?

答えて

2

はかなり基本的なものに見える...これが役に立てば幸い:あなたの列のデータ型を想定し

SELECT X.*, 
     CASE WHEN X.A=1 THEN 1 ELSE 0 END + 
     CASE WHEN X.B=1 THEN 1 ELSE 0 END + 
     CASE WHEN X.C=1 THEN 1 ELSE 0 END + 
     CASE WHEN X.D=1 THEN 1 ELSE 0 END + 
     CASE WHEN X.E=1 THEN 1 ELSE 0 END + 
     CASE WHEN X.F=1 THEN 1 ELSE 0 END AS SUM_ONES 
FROM X; 
+0

:)助けるためのおかげで、間違いなく右のトラックに私をもたらしました! –

0

は数値で、あなたはこれを使用することができます。

SELECT 
    CASE WHEN col1 = 1 THEN '*' ELSE '' END || 
    CASE WHEN col2 = 1 THEN '*' ELSE '' END || 
    ... 
    AS RowValueSearchString 

それからちょうどLEN/CHAR_LENGTH関数を使用しますRowValueSearchStringの上にある文字列の長さを見つけるために(あなたが持っているDBに依存します)。連結された文字列の長さは、行内で探している値の出現回数を示します。

0

あなたはSQL Serverの2012+ようにしている場合は、CASE OR IIFを使用することができます。

CREATE TABLE X (
    A INT, 
    B INT, 
    C INT, 
    D INT, 
    E INT, 
    F INT 
    ); 

INSERT INTO X VALUES 
(1, 0, 0, 1, 0, 1), 
(2, 0, 1, 2, 1, 0), 
(1, 0, 1, 0, 1, 0); 

SELECT X.*, 
     IIF(A = 1, A, 0) + 
     IIF(B = 1, B, 0) + 
     IIF(C = 1, C, 0) + 
     IIF(D = 1, D, 0) + 
     IIF(E = 1, E, 0) + 
     IIF(F = 1, F, 0) AS [Σ] 
FROM X; 

結果:

+---+---+---+---+---+---+---+ 
| A | B | C | D | E | F | Σ | 
+---+---+---+---+---+---+---+ 
| 1 | 0 | 0 | 1 | 0 | 1 | 3 | 
| 2 | 0 | 1 | 2 | 1 | 0 | 2 | 
| 1 | 0 | 1 | 0 | 1 | 0 | 3 | 
+---+---+---+---+---+---+---+ 
関連する問題