>サブクエリを使うのか?TOを使うのか、ググって何度か試したけども
>いまいちわかりませんでした。
それはデータの持ち方が悪いからです。
普通はご提示のようなデータの持ち方にはなりません。
areaはおそらくvarchar型が妥当ですが、yearやpayはint型がよいでしょう
それをvalueという枠に押し込めるのは賢明ではありません
正規化について学習をされたほうがよいでしょう。
ちなみに今回の例示で実現するなら以下のようにすると良いでしょう。
select s.staff_id,staff_name,staff_group
,v1.value as area
,v2.value as year
,v3.value as pay
from staff_tbl as s
left join value_tbl as v1 on s.staff_id=v1.staff_id and v1.value_name='area'
left join value_tbl as v2 on s.staff_id=v2.staff_id and v2.value_name='year'
left join value_tbl as v3 on s.staff_id=v3.staff_id and v3.value_name='pay'
left join にするかinner joinにするかは仕様を検討してください
普通の結合でいいのでは?
select A.staff_id,A.staff_name,A.staff_group
,B.value,C.value,D.value from ((staff_tbl A
inner join staff_value B ON A.staff_id=B.staff_id
AND B.value_name='area')
inner join staff_value C ON A.staff_id=C.staff_id
AND C.value_name='year')
inner join staff_value D ON A.staff_id=D.staff_id
AND D.value_name='pay'
お礼
ありがとうございます。 早速試してみます。 >それはデータの持ち方が悪いからです。 >普通はご提示のようなデータの持ち方にはなりません。 >areaはおそらくvarchar型が妥当ですが、yearやpayはint型がよいでしょう >それをvalueという枠に押し込めるのは賢明ではありません >正規化について学習をされたほうがよいでしょう 確かにその通りなんですが、既存DBがすでに運用中で、変えようがないのです。。。 困ったものです(>_<)