アプリ版:「スタンプのみでお礼する」機能のリリースについて

■データテーブル(t1)
id name weight sort
1 apple 1 A
2 apple2 3 A
3 apple3 5 B

■weightテーブル(t2)
weight A B
1 20 30
2 30 40
3 40 50
4 50 60
5 60 70

上記のようなテーブルがあった時に、結果として

name weight,fee
apple 1 20
apple2 3 40
apple3 5 70 ←sort=Bなので、t2テーブルのBの方の値

select name,weight,t2.{t1のsortの値} as fee from t1,t2 where t1.weight = t2.weight;
と言った感じにカラム指定で、変数みたいな感じで指定することは可能のなのでしょうか?

よろしくお願いします。

A 回答 (2件)

>変数的な扱いでやるのは難しい



できませんよ。
どうしてもやるならprocedureで処理するか、以下のように
ピボットをつかってみると少しは簡単にかけるでしょう

//元データ
create table t1(id int primary key,name varchar(30),weight int,sort varchar(30));
insert into t1 values(1,'apple',1,'A'),(2,'apple',3,'A'),(3,'apple',5,'B'),(4,'apple',4,'C');
create table t2(weight int primary key,A int,B int,C int,D int);
insert into t2 values(1,20,30,40,50),(2,30,40,50,60),(3,40,50,60,70),(4,50,60,70,80),(5,60,70,80,90);
create table t3(sort varchar(30),A int,B int,C int,D int);
insert into t3 values('A',1,0,0,0),('B',0,1,0,0),('C',0,0,1,0),('D',0,0,0,1);

//集計
select id,name,weight,sort,t2.A*t3.A+t2.B*t3.B+t2.C*t3.C+t2.D*t3.D as fee
from t1
inner join t2 using(weight)
inner join t3 using(sort);
    • good
    • 0
この回答へのお礼

再度ありがとうございます!! こんな書き方があるんですね!だいぶ省略できるので助かります。

お礼日時:2017/03/22 01:09

直接流用はできません、こうしてください



//元データ
create table t1(id int primary key,name varchar(30),weight int,sort varchar(30));
insert into t1 values(1,'apple',1,'A'),(2,'apple',3,'A'),(3,'apple',5,'B');
create table t2(weight int primary key,A int,B int);
insert into t2 values(1,20,30),(2,30,40),(3,40,50),(4,50,60),(5,60,70);

//抽出
select t.name,t1.weight
,case t1.sort when 'A' then t2.A when 'B' then t2.B end as fee
from t1
inner join t2 on t1.weight=t2.weight
    • good
    • 0
この回答へのお礼

ありがとうございます!確かにできるのですが、実際のデータはA、Bだけでなく大量にあるので。。。ちょっと長くなってしまいます。。。変数的な扱いでやるのは難しいのでしょうか?

お礼日時:2017/03/21 18:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!