sql - Netezza-根据另一列的顺序连接来自单列的不同值

标签 sql netezza

我正在尝试根据样本计数器的顺序和 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 都具有相同数量的样本类型,并且样本类型的顺序不同。样本计数器是在使用不同样本类型时(订单)。任何帮助将不胜感激。谢谢!

最佳答案

有几种方法可以解决这个问题。字符串聚合通常是特定于数据库的。但是,计数器列允许条件聚合:

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()功能。

关于sql - Netezza-根据另一列的顺序连接来自单列的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36847679/

相关文章:

mysql - SQL CASE WHEN 问题,查询根本没有运行

mysql - 酒店管理数据库设计问题

SQL 获取 Netezza 数据库中的唯一行

MYSQL以分钟为单位获取两个日期时间之间的差异并在字段中更新

sql - MacOS 的 DB 素描器?

java - 为 Android SQLite 动态生成创建表查询

sql - 我该如何将此查询编写为联接而不是相关查询?

mysql - Hive表和Netezza表之间的匹配记录

sql - 在netezza中不使用正则表达式替换字符串

left-join - 在 netezza 中使用左连接进行更新