ID と説明の 2 つの列を持つテーブルがあります。ID = 1 の場合、説明は個人の名前を表します。ID = 2 の場合、説明は個人の住所を表します。ID が 3 の場合、説明はその人のコメントを表します。
3 種類の説明をすべて選択するには、どのクエリを実行する必要がありますか。ケースを使用してみましたが、私の場合はうまくいきません。ユニオンは機能しますが、クエリを 3 回実行します。これを行うためのより簡単で効果的な方法はありますか?
ID と説明の 2 つの列を持つテーブルがあります。ID = 1 の場合、説明は個人の名前を表します。ID = 2 の場合、説明は個人の住所を表します。ID が 3 の場合、説明はその人のコメントを表します。
3 種類の説明をすべて選択するには、どのクエリを実行する必要がありますか。ケースを使用してみましたが、私の場合はうまくいきません。ユニオンは機能しますが、クエリを 3 回実行します。これを行うためのより簡単で効果的な方法はありますか?
これは非常に悪いアプローチですが、次のように解決できます:(テーブルにpersonIDを追加して、その主キーにしました)
create table person(
personID int,
id int,
description varchar(40))
insert into person values (1,1, 'name')
insert into person values (1,2, 'adress')
insert into person values (1,3, 'comments')
SELECT p.personID, p.description, p2.description, p3.description
FROM person p JOIN person p2 ON p.personID=p2.personID and p.id=1 and p2.id=2 JOIN person p3 ON p.personID=p3.personID AND p3.ID=3
このデータを別のテーブルに関連付ける方法があると思います。その場合は、次のようなものを使用できます。
select t1.someId,
max(case when t2.id = 1 then t2.description end) name,
max(case when t2.id = 2 then t2.description end) address,
max(case when t2.id = 3 then t2.description end) comments
from table1 t1
left join table2 t2
on t1.someId = t2.someid
group by t1.someId
これにより、特定の行の各レコードの一意のデータが得られます。その後、このデータを別のテーブルに挿入できます。
これが解決策でした。フィードバックをくださった皆様、ありがとうございました。
select table.ID,
max (case when id = 1 then description end) as size
max (case when id = 2 then description end) as address
max (case when id = 3 then description end) as comments
group by id