1. ホーム
  2. sql

[解決済み] Netezza- 別の列の順序に基づいて、1つの列から異なる値を連結する

2022-02-13 16:47:14

質問

サンプルカウンターの順番とIDフィールドに基づいて、列連結を行おうとしています。以下は、データの例です。

**Heat ID**  **Sample Type**  **Sample Counter**
  466170            T1                2 
  466170            L0                3
  466170            C1                4
  466170            V2                1
  580910            C1                1
  580910            L0                2
  580910            T1                3  

以下は、私が欲しいものです。つまり、サンプルカウンターの昇順で連結させたいのです。

**Heat ID**  **Concat Code**
  466170       V2_T1_L0_C1
  580910       C1_L0_T1

データは、すべてのヒートIDが同じ量のSample Typesを持つわけではなく、Sample Typesの順番も異なるように構成されています。Sample counterは、異なるSample Typeが使用された場合(The Order)です。どのようなヘルプでも、非常に感謝しています。ありがとうございました。

解決方法を教えてください。

これには、いくつかの方法があります。 文字列の集約は一般に、どちらかというとデータベース特有のものです。 しかし、カウンタカラムを使えば、条件付き集計が可能になります。

select heatid,
       (max(case when samplecounter = 1 then sample_type else '' end) ||
        max(case when samplecounter = 2 then '_' || sample_type  else '' end) ||
        max(case when samplecounter = 3 then '_' || sample_type  else '' end) ||
        max(case when samplecounter = 4 then '_' || sample_type  else '' end) ||
        max(case when samplecounter = 5 then '_' || sample_type  else '' end)
       ) as concat_code

from t
group by heatid;

最大サンプル数に対して十分な条件文が必要なことに注意してください。

また、一部のデータベースでは || として + を明示的に使用することを要求したり、あるいは concat() 関数を使用します。