我有一个简单的加载声明:
LOAD FIELDA,
FIELDB,
FIELDC,
FIELDD,
FIELDE
FROM
[C:\Users\XXX\data.QVD]
(qvd);
这样可以很好地加载所有数据。
如果我将表达式添加到直表中,它会给出连接字段:
concat(FIELDA&'.'&FIELDB&'.'&FIELDC&'.'&IF(Isnull(FIELDD), '0', FIELDD)&'.'&IF(Isnull(FIELDE), '0', FIELDE)) as MERGED
这是有效的,但是如果我尝试从load语句添加连接字段,我会收到错误:
LOAD FIELDA,
FIELDB,
FIELDC,
FIELDD,
FIELDE,
concat(FIELDA&'.'&FIELDB&'.'&FIELDC&'.'&IF(Isnull(FIELDD), '0', FIELDD)&'.'&IF(Isnull(FIELDE), '0', FIELDE)) as MERGED
FROM
[C:\Users\XXX\data.QVD]
(qvd);
表达式无效
答案 0 :(得分:3)
concat
函数是一个聚合函数,因此它希望group by知道该怎么做,因此无效的表达式错误。在前端,您为图表选择的尺寸可用于此目的。
如果您只想连接行的字段行,只需删除concat
函数。
FIELDA&'.'&FIELDB&'.'&FIELDC&'.'&IF(Isnull(FIELDD), '0', FIELDD)&'.'&IF(Isnull(FIELDE), '0', FIELDE) as MERGED
concat函数的实际用法是这样的,运行它并看看MERGE和MERGE2之间的区别;
A:
LOAD * INLINE [
FieldA, FieldB,FieldC
1, 2,1
1, 0,1
2, 9,1
2, 4,1
];
B:
load FieldA,
concat(FieldB,'|') as MERGE
Resident A
group by FieldA;
C:
load FieldA,
FieldB,
FieldC,
FieldA&'.'&FieldB&'.'&FieldC as MERGE2
resident A;
drop table A;