1

person(id、phonetype、phonenumber)、phonetype(id、txtDisplay)の2つのテーブルがあります。例えば

フォンタイ

Id  txtDisplay
1   Home Phone
2   Work Phone
3   Mobile Phone

Id  phonetype   phonenumber
0001    1       6310001111
0001    2       6310001112
0002    3       5160002113
0003    2       7180003112

結果テーブルは

Id  home_phone  work_phone  mobile_phone
0001    6310001111  6310001112
0002                    5160002113
0003            7180003112

これに対するクエリをどのように記述すればよいですか?

4

2 に答える 2

3

これは、すべての電話タイプをすでに知っている場合にのみ機能します。

SELECT
  id,
  max(case when phonetype=1 then phonenumber end) as home_phone,
  max(case when phonetype=2 then phonenumber end) as work_phone,
  max(case when phonetype=3 then phonenumber end) as mobile_phone
FROM Person
GROUP BY id
于 2012-11-30T19:11:03.000 に答える
2

SQL では、クエリが解析される時点で列名がわかっている必要があります。検出したデータに応じて列数を自動的に拡張するクエリを作成することはできません。

ただし、次の 2 つのクエリで実行できます。

  1. まず、Phonetype テーブルからすべての個別の電話番号タイプを取得します。

  2. 次に、異なる電話番号の種類と同じ数の列を追加するコードを記述します。

Microsoft SQL Server は、これらの種類のクエリに少し役立つPIVOT操作をサポートしていますが、必要な列の個別の値をすべて把握しておく必要があります。したがって、上記の 2 段階のプロセスは、Microsoft だけでなく、SQL の他の実装にも適用されます。

于 2012-11-30T19:12:24.580 に答える