2011-12-09 6 views
1

私はこのようなテーブルを持っている:1行で値を数える方法は?

| ID | X1 | X2 | X3 | .. | Xn | 
    +----+----+----+----+----+----+ 
    | 1 | x | '' | x | '' | '' | 
    +----+----+----+----+----+----+ 
    | 2 | '' | '' | x | '' | '' | 
    +----+----+----+----+----+----+ 
    | 3 | x | x | x | '' | x | 
    +----+----+----+----+----+----+ 
'' = Empty string, not null 

今、私は「X」は、行2または3またはNであるどのように多くを知りたいです。これを達成する簡単な方法はありますか?この方法、データを保管しないでくださいMS SQL Server 2008の

+0

RDBMSとは何ですか(そしてバージョン?) –

+1

この宿題はありますか?それは確かに宿題のように見える。これまでに試したことを教えてください。 –

+2

私は31歳です。私はもう宿題をしていません。 ;)ちょうどSQLに慣れて、いくつかの自習練習で練習しようとしています。実際、私はシンプルなTic-Tac-Toeゲームを作成しようとしており、Xを連続して数えたいと思っています(実際にX> nは3回起こることはありませんでしたが、 - 質問にデータベースを追加しました。 – Feroc

答えて

3
SELECT ID, 
     (SELECT COUNT(*) 
     FROM (VALUES (X1), 
         (X2), 
         (X3), 
         /* ... */ 
         (Xn)) T(X) 
     WHERE X = 'X') AS Num 
FROM YourTable 
+0

すべての単一の列を書きたくない場合は、動的SQLを使用するのが最適なソリューションですか?私はwhileループを作成し、すべてのx列をSQL文字列に追加するだけです。それとももっと良い方法がありますか? – Feroc

+1

@Feroc - 動的SQLを使用してすべての列を含むクエリを生成することもできますし、各値を 'ID、Index、Value'列のテーブルに独自の行に格納するように再構成することもできます。 –

+0

カラム;あなたがSQLでそれをやっているかどうかは選択肢がありません。 –

1

を使用して

。代わりに、それをXCoord、YCoord、Valueのテーブルに格納します。次に、あなたは次のようなことができます:

SELECT  XCoord, COUNT(Value) AS XTotal 
FROM   TicTacTable 
WHERE  (Value = 'x') 
GROUP BY XCoord 
+0

プレーフィールドがSQLデータベースの外にある場合、私はそれを行いますが、この場合、ゲームはデータベース上で直接プレイされます。 – Feroc

関連する問題