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,但您需要检查他们为此提供了哪些功能。