0

別の列に基づいて定義済みの数値を列に掛ける方法はありますか? 列の値に応じて使用される定義済みの数値が複数あります。

例:

テーブル

Columns: persons_id,activity,scale 

1,swimming,4  
1,baseball,2  
1,basketball,3  
2,swimming,6  
2,basketball,3

定義済みの数字が 6 (水泳)、8 (野球)、5 (バスケットボール) の場合

出力は次のようになります

1,swimming,4,24  
1,baseball,2,16  
1,basketball,2,10  
2,swimming,6,36  
2,basketball,3,15

編集:貢献してくれてありがとう。私は最終的にsgeddesのソリューションを使用しました。

4

4 に答える 4

4

確かに、あなたは使用することができますCASE

SELECT Persons_Id, Activity, Scale, 
   Scale * 
   CASE 
      WHEN Activity = 'swimming' THEN 6
      WHEN Activity = 'baseball' THEN 8
      WHEN Activity = 'basketball' THEN 5
      ELSE 1
   END Total
FROM YourTable

幸運を。

于 2013-02-05T23:49:22.300 に答える
0

SCALE値を乗算するWEIGHTという別の列があります。おそらく、トリガーを使用して列にデータを入力することで製品を計算できます。それ以外の場合は、単純なSELECTで問題ありません。

于 2013-02-05T23:49:15.457 に答える
0

このクエリを使用できます:

select persons_id, activity, scale, 
 scale * case when activity = 'swimming' then 6
              when activity = 'baseball' then 8
              when activity = 'basketball' then 5 end as result
from Table1

しかし、より良い解決策は、新しいテーブルCoefficients(activity、cofactory)を定義することです。

行を挿入できるように:'水泳'、6'野球'、8'バスケットボール'、5

次に、次のようなものを使用します。

select persons_id, activity, scale, scale * coefficient as result
from Table1 inner join Coefficients on Table1.activity = Coefficients.activity
于 2013-02-05T23:51:55.013 に答える
0

値を格納するテーブルを使用したり、乗数を返すサブクエリを作成したりすることもできます。

select persons_id,
  t.activity,
  scale, 
  scale * s.val  as result
from yourtable t
inner join
(
  select 'swimming' activity, 6 val
  union all
  select 'baseball' activity, 8 val
  union all
  select 'basketball' activity, 5 val
) s
  on t.activity = s.activity

SQL FiddlewithDemoを参照してください

結果は次のとおりです。

| PERSONS_ID |   ACTIVITY | SCALE | RESULT |
--------------------------------------------
|          1 |   swimming |     4 |     24 |
|          1 |   baseball |     2 |     16 |
|          1 | basketball |     3 |     15 |
|          2 |   swimming |     6 |     36 |
|          2 | basketball |     3 |     15 |
于 2013-02-05T23:53:28.000 に答える