0

我是 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 Table 中获取 accountNo,其中 accountNo 是 XXXX-00-XX-XXXX、XXXX-01-XX-XXXX、XXXX-02-XX-XXXX、XXXX-03-XX-XXXX 和 XXXX- 04-XX-XXXX 使用 sql 代码或 Qlikview 语法

4

2 回答 2

1

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

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, 6, 2)

您也可以添加一个计算列,但我不知道这与 Qlikview 的工作情况如何

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

然后你可以做

select * from accounts where accountMarker in ('01', '02', ...)
于 2021-07-28T13:39:00.597 回答
0

为了完整起见

这是 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','02','03'.....);

或将所有内容组合成类似的东西

load *,
     substring(accountNo,'-',2) as AccountType
where match(substring(accountNo,'-',2),'01','02','03'.....);
select * from accounts;
于 2021-07-30T07:32:50.647 回答