如何解决Qlik / SQL服务器
长期阅读者首次海报。
当出现特定值时,我需要一些帮助来返回相应的值。
例如,我想返回点A和与该位置关联的值。在第一行中,该行将为1,第二行3,第三行为1。
+-----------+-----------+
| Column A | Column B |
+-----------+-----------+
| A;B;C;D;E | 1;2;3;4;5 |
| B;A;C;D;E | 2;3;4;5;1 |
| D;C;E;A;B | 5;2;3;1;4 |
+-----------+-----------+
解决方法
您可以使用SubField函数拆分两个列值。使用id
函数(不使用SubField
参数)为每个值创建一行。
例如:如果我们在field_no
字段中有A;B;C;D
作为值,而我们使用MyField
。结果,Qlik将创建4行:
SubField(MyField,';')
因此,如果我们在MyField
-------
A
B
C
D
和SubField
字段上都使用ColumnA
(并在新行之间保持索引),我们可以创建一个新的“平面”表,其中包含两者之间的链接列拆分值
重新加载下面的脚本将得到两个表:ColumnB
和Data
。 Flatten
是原始数据,Data
是结果
查看Flatten
表中的Value
和Index
列。它们是在Flatten
和SubField
ColumnA
的结果
ColumnB
更新:脚本已更新为仅返回// Load the sample data
// preceeding load to add ID to each row
Data:
Load
ColumnA,ColumnB,RowNo() as RowId
;
Load * inline [
ColumnA,ColumnB
A;B;C;D;E,1;2;3;4;5
B;A;C;D;E,2;3;4;5;1
D;C;E;A;B,5;2;3;1;4
];
// Passing RowId across just in case if we want to link back
// to the Data table
Flatten_Temp:
// Preceding load to add ID (ValueId) for each value in ColumnA
// this ID will be used to join back to the values in ColumnB
Load
RowId,ColumnASplit as Value,RowNo() as ValueId
;
// Using SubField function to create row for each value in ColumnA
Load
RowId,SubField(ColumnA,';') as ColumnASplit
Resident
Data
;
JOIN
// Preceding load to add ID (ValueId) for each value in ColumnB
Load
RowId,ColumnBSplit as Index,RowNo() as ValueId
;
// Using SubField function to create row for each value in ColumnB
Load
RowId,SubField(ColumnB,';') as ColumnBSplit
Resident
Data
;
NoConcatenate
// Load only 'A' values from the table above
Flatten:
Load
*
Resident
Flatten_Temp
Where
Value = 'A'
;
Drop Table Flatten_Temp;
的值
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。