Sql 选择count distinct以列出,而不是count

Sql 选择count distinct以列出,而不是count,sql,teradata,Sql,Teradata,我有以下疑问: select distinct(ord_nbr), ord_line_rate_nbr, count(distinct(ntwrk_key)), count(distinct(stn_key)) from my_table where ord_nbr in (select distinct(ord_nbr) from another_table) group by 1,2 order by 1 desc ; 我想了解一下count(distin

我有以下疑问:

select distinct(ord_nbr), ord_line_rate_nbr, count(distinct(ntwrk_key)), count(distinct(stn_key))
    from my_table
    where ord_nbr in (select distinct(ord_nbr) from another_table)
    group by 1,2
    order by 1 desc
 ;
我想了解一下
count(distinct(ntwrk_键))、count(distinct(stn_键))
,并用一个不同值的列表替换它

因此,对于第1行,
count(distinct(ntwrk_key))==5
。 相反,我想返回
[ntwk1,ntwk4,ntwk5,ntwk9,ntwk12]

编辑:假设我们有这个表

+---------+-------------------+-----------+----------+
| ord_nbr | ord_line_rate_nbr | ntwrk_key | stn_key\ |
+---------+-------------------+-----------+----------+
|   12345 |                 1 | NTWK_A    | STN_A    |
|   12345 |                 1 | NTWK_B    | STN_A    |
|   12345 |                 1 | NTWK_C    | STN_B    |
|    9876 |                 2 | NTWK_F    | STN_A    |
|    9876 |                 3 | NTWK_F    | STN_A    |
|    9876 |                 3 | NTWK_F    | STN_A    |
|    9876 |                 3 | NTWK_F    | STN_A    |
+---------+-------------------+-----------+----------+
我的当前输出:

+---------+-------------------+-----------+----------+
| ord_nbr | ord_line_rate_nbr | ntwrk_key | stn_key\ |
+---------+-------------------+-----------+----------+
|   12345 |                 1 | 3         | 2        |
|    9876 |                 2 | 1         | 1        |
|    9876 |                 3 | 1         | 1        | 
+---------+-------------------+-----------+----------+
我的期望输出:

+---------+-------------------+----------------------+-------------+
| ord_nbr | ord_line_rate_nbr |      ntwrk_key       |  stn_key\   |
+---------+-------------------+----------------------+-------------+
|   12345 |                 1 | NTWK_A,NTWK_B,NTWK_C | STN_A,STN_B |
|    9876 |                 2 | NTWK_F               | STN_A       |
|    9876 |                 3 | NTWK_F               | STN_A       |
+---------+-------------------+----------------------+-------------+
最好的办法是什么


提前谢谢

Teradata中仍然没有通用的字符串聚合函数,但有几种实现方法。主要问题是不同的部分,它需要嵌套的行号:

SELECT ord_nbr
  ,ord_line_rate_nbr 
  -- string aggregation
  ,Trim(Trailing ',' FROM (XmlAgg(Trim(ntwrk_key) ORDER BY ntwrk_key) (VARCHAR(1000))))
  ,Trim(Trailing ',' FROM (XmlAgg(Trim(stn_key)   ORDER BY stn_key) (VARCHAR(1000))))
FROM
 (
   SELECT
      ord_nbr
     ,ord_line_rate_nbr   
     ,CASE WHEN -- return only one of the duplicate values to emulate DISTINCT 
             Row_Number()
             Over (PARTITION BY ord_nbr,ord_line_rate_nbr, ntwrk_key 
                   ORDER BY ntwrk_key) = 1
           THEN ntwrk_key||','
           ELSE '' 
      END AS ntwrk_key 
     ,CASE WHEN
             Row_Number() -- return only one of the duplicate values to emulate DISTINCT 
             Over (PARTITION BY ord_nbr,ord_line_rate_nbr, stn_key
                   ORDER BY stn_key) = 1
           THEN stn_key||','
           ELSE ''
      END AS stn_key 
   FROM my_table
 ) AS dt
GROUP BY 1,2
ORDER BY 1 DESC;

性能取决于总行数和每组行数。

提示:
具有
。您可以发布示例数据和所需结果吗?您需要一些字符串聚合函数,类似于sum、max等,但需要执行字符串聚合。虽然您不熟悉teradata,但您需要检查他们为此提供了哪些功能。