4

私はテーブルを持っています

ANSWERS 
   qId
   toggle_value

HTMLラジオボタンの値を記録します{Yes, N/A, No, Resolved}

ここで、質問IDごとにグループ化された、はい、いいえ、nas、および解決済みの数を数えて要約します。

簡単にするために、個々のクエリの作成を開始しました。

SELECT qId, count(*) as yes_qty FROM ANSWERS WHERE TOGGLE_VALUE='Yes' GROUP BY qId;
SELECT qId, count(*) as na_qty FROM ANSWERS WHERE TOGGLE_VALUE='NA' GROUP BY qId;
SELECT qId, count(*) as no_qty FROM ANSWERS WHERE TOGGLE_VALUE='No' GROUP BY qId;
SELECT qId, count(*) as resolved_qty FROM ANSWERS WHERE TOGGLE_VALUE='Resolved' GROUP BY qId;

しかし、私は本当にそれを1つのクエリに入れたいので、リストを繰り返して次のようなものを表示できます(3つの質問で14のチェックリストを集約)

Q      Yes      No     NA     Resolved
1       4       10     0        10
2      14        0     0         0
3       7        0     7         0

私は実際にはトグル値に文字列を使用していませんが、数値1 =はい、2 = NAなどです...そして、より良いテーブルデザインがあったかどうか疑問に思いました

ANSWERS 
   qId
   yes_value
   no_value
   na_value
   resolved_value

テーブルdeisgnを変更した場合、他の多くのことをリファクタリングする必要があるため、単一のクエリが機能することを望んでいました。

4

2 に答える 2

5
SELECT qId,
       SUM(CASE WHEN TOGGLE_VALUE='Yes' THEN 1 ELSE 0 END) AS YesQty,
       SUM(CASE WHEN TOGGLE_VALUE='No' THEN 1 ELSE 0 END) AS NoQty,
       SUM(CASE WHEN TOGGLE_VALUE='NA' THEN 1 ELSE 0 END) AS NAQty,
       SUM(CASE WHEN TOGGLE_VALUE='Resolved' THEN 1 ELSE 0 END) AS ResolvedQty
  FROM ANSWERS 
 GROUP BY qId
于 2012-09-07T17:10:08.850 に答える
1

私はあなたのテーブルのデザインが好きです。個人的には、SUMandGROUP BYおよび usingCASE句を使用してこれを解決し、新しい列を作成します。

于 2012-09-07T17:11:35.910 に答える