微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 SQL 或 Qlik 视图中获取帐号具有模式的值

如何解决在 SQL 或 Qlik 视图中获取帐号具有模式的值

我是 Qlik 视图的新手,想编写一个查询来检索具有特定模式的记录。我有帐户表,其中有 accountNo 字段,该字段的值采用以下模式 -

accountNo
XXXX-00-XX-XXXX
XXXX-01-XX-XXXX
XXXX-02-XX-XXXX
XXXX-03-XX-XXXX
XXXX-04-XX-XXXX
XXXX-05-XX-XXXX
XXXX-06-XX-XXXX and so on.

请注意,X 是数字,例如 1124-00-52-6000、2547-01-63-8552、3697-02-56-6542 等。 但是,我试图从 Accounts 表中获取 accountNo,其中 accountNo 是 XXXX-00-XX-XXXX、XXXX-01-XX-XXXX、XXXX-02-XX-XXXX、XXXX-03-XX-XXXX 和 XXXX- 04-XX-XXXX 使用 sql 代码或 Qlikview 语法

解决方法

如果您真的只想检查帐号的第二部分,并且所有帐号都完全遵循给定的结构,则可以使用以下简单(但可能很慢)的方法

select * from accounts where substring(accountno,6,2) in ('01','02','03','04','05',...)

即,获取与结果相关的帐号部分,并检查它是否符合您的条件。

但最好将数据表转换为支持这种类型的查询,而无需任何字符串操作,因为它们非常昂贵。即添加一个额外的列 accountMarker(或任何你想叫它的东西),不要忘记相应地调整你的插入。

alter table accounts add accountMarker nvarchar(2)
update table accounts set accountMarker = substring(accountno,2)

您也可以添加计算列,但我不知道这与 Qlikview 的配合效果如何

alter table accounts add accountMarker as substring(accountno,2)

然后你就可以了

select * from accounts where accountMarker in ('01',...)
,

为了完整起见

这里是 Qlik 选项,其外观和工作方式与 SQL 非常相似,优点是无需更改 SQL 源。

假设您要查找的 2 个数字的两侧总是带有“-”

substring(accountNo,'-',2)

如果需要,您可以使用此表达式创建一个新字段,将帐户分组为 01、02、03 类型的帐户。这将为您提供一个新维度,您可以在前端可视化/过滤器/设置分析选项中轻松使用它,而无需在每次重新计算时重做 substring() 工作。

substring(accountNo,2) as AccountType

您可以在 where 子句中使用它来仅获取您想要的类型的帐户

load * from Accounts.qvd (qvd)
where match(substring(accountNo,2),'01','03'.....);

或将所有内容组合成类似

load *,substring(accountNo,2) as AccountType
where match(substring(accountNo,'03'.....);
select * from accounts;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。