如何在postgresql中添加条件值大于1的字母表?
我想在no_surat的末尾添加字母表,但根据条件,它在account字段中有超过1个相同的值,如果account只有1个值,它将不会添加字母表 我已经尝试过这个查询,但它也向帐户添加了一个字母表,该帐户只有1个值,如帐户编号335,一个帐户只有1个值,如355,应该没有添加的字母表帐户335应该没有\u suratABC编号SKF.161如何在postgresql中添加条件值大于1的字母表?,sql,postgresql,Sql,Postgresql,我想在no_surat的末尾添加字母表,但根据条件,它在account字段中有超过1个相同的值,如果account只有1个值,它将不会添加字母表 我已经尝试过这个查询,但它也向帐户添加了一个字母表,该帐户只有1个值,如帐户编号335,一个帐户只有1个值,如355,应该没有添加的字母表帐户335应该没有\u suratABC编号SKF.161 SELECT ACCOUNT, NO_SURAT, no_suratABC FROM (SELECT *, concat((NO_SURAT) ,
SELECT ACCOUNT, NO_SURAT, no_suratABC
FROM
(SELECT *, concat((NO_SURAT) , CHR(64 + CAST ( row_number() OVER(PARTITION BY ACCOUNT_NUMBER order by ACCOUNT_NUMBER) AS integer ))) AS No_suratABC
FROM
(SELECT DISTINCT ON (ADDRESS) * FROM account_information) a) b;
我有这个数据记录
|account | no_surat | no_suratABC|
|----- | ------ | ----- |
|337 | No.SKF.6 | No.SKF.6A |
|337 | No.SKF.5 | No.SKF.5B |
|337 | No.SKF.4 | No.SKF.4C |
|335 | No.SKF.161| No.SKF.161A|
|184 | No.SKF.105| No.SKF.105A|
|184 | No.SKF.71 | No.SKF.71B |
关于我应该如何添加到查询中的任何建议?您可以使用此处的行号选择出现的字母:
以cte为例
在地址*上选择DISTINCT,
按帐户顺序划分的分区上的行数,按编号说明,
按帐户cnt划分的分区上的计数*
从帐户信息
选择帐户,无需额外付款,
cnt>1时的情况
然后CONCATNO_SURAT,将rn::int中的“abcdefghijklmnopqrstuvxyz”子串用作1
除此之外,没有其他原因
来自cte;
上面使用的技巧是取字母字符串abcdefghijklmnopqrstuvxyz的1长度子字符串,使用行号决定选择哪个字母。请注意,我在这里假设您永远不需要Z以外的字母标签,它假设每个帐户关联的记录不会超过26条。您的基本方法很好。只要修改语法并加入逻辑就可以了。你所描述的是:
SELECT ACCOUNT, NO_SURAT,
(CASE WHEN COUNT(*) OVER (PARTITION BY ACCOUNT) > 1
THEN NO_SURAT || (CHR(64 + CAST (ROW_NUMBER() OVER (PARTITION BY ACCOUNT ORDER BY ACCOUNT)::int)
ELSE NO_SURAT
END) as No_suratABC
FROM account_information;
但是,您的示例数据表明您需要:
SELECT ACCOUNT, NO_SURAT,
(NO_SURAT || CHR(64 + ROW_NUMBER() OVER (PARTITION BY ACCOUNT ORDER BY ACCOUNT)::int)) as No_suratABC
FROM account_information;
是一个数字小提琴。哪些字母应该出现在Z之后的序列中?我们只需要考虑Z,记住“不”和“不能”之间的区别。作为设计师/开发人员,你工作的一部分是系统地控制不可能发生的事情,因为它们可以,我得到了错误>错误:函数pg_catalog.substringunknown,bigint,integer不存在exist@omik尝试将行号强制转换为整数,即使用FROM rn::int表示1,q.v.上面更新的答案。它仍在为只有1个值的帐户添加字母表。我为此添加了一个修复,虽然你在最初的问题中从未提到过这个要求。