0

次のコンテンツを持つテーブルがあります。

Customer ID             Customer type                
---------               --------
123                        A
123                        alpha
123                        Beta   
456                        B
456                        BGamma
456                        BBeta

私は次のことを達成したい:

Customer_ID    Customer_type     Customer_E1    Customer E_2   Customer E_3 
---------      -----------       -----------    -------------  -------------
123                 A               Alpha          Beta
456                 B               BGamma         BBeta

これを実現するための Sybase クエリを教えてください。

4

2 に答える 2

1

Sybase には、PIVOTあなたがしようとしている機能があるとは思えません。CASEしたがって、ステートメントで集計関数を使用する次のようなものを実装できる場合があります。

select customerid,
  max(case when rn = 1 then customertype else null end) CustomerType,
  max(case when rn = 2 then customertype else null end) Customer_E1,
  max(case when rn = 3 then customertype else null end) Customer_E2
from
(
  select CustomerID, CustomerType,
    row_number() over(partition by CustomerID order by CustomerID) rn
  from yourtable
) src
group by customerid

デモで SQL Fiddle を参照してください

注:データの最初の列に問題がある可能性がありますCustomerType。私の提案は、これを他の値とは別の列に入れることです。これは割り当てに参加せずrow_number()、正しい値が表示されることを保証しやすくなります。

于 2012-12-23T17:25:14.073 に答える
0

データモデルを正規化することをお勧めします。明らかに 'A' と 'Alpha' は異なる種類のデータ値 (それらは異なるものを記述します) ですが、同じフィールドにあるため、あらゆる種類の問題が発生します。データベースの正規化に関するこの記事を参照してください。この記事では、関連する概念について十分に説明しています。

基本的に、あなたが最終的に望むのは、顧客 ID と顧客タイプを介して入力できる別のテーブルにアルファとベータ タイプの値を持つことです。

于 2012-12-23T17:26:40.120 に答える