我有QV报告,表格如下:
+---------+--------+---------------+------+-------+
| HOST | OBJECT | SPECIFICATION | COPY | LAST |
+---------+--------+---------------+------+-------+
| host001 | obj01 | spec01 | c1 | 15:55 |
| host002 | obj02 | spec02 | c2 | 14:30 |
| host003 | - | - | - | - |
| host004 | - | - | - | - |
+---------+--------+---------------+------+-------+
现在我又拿了一张小桌子:
spec1
host1
host4
我需要的是加载脚本以这种方式连接这些表:
第一行是规范,所有其他行是主机。如果主机的名称来自第二个表(host1)的第二行并且第一行的规范,那么我需要将主机行(host1)中的所有其他值复制到第二个表(host4)中的其他主机的行,例如:
+---------+--------+---------------+------+-------+
| HOST | OBJECT | SPECIFICATION | COPY | LAST |
+---------+--------+---------------+------+-------+
| host001 | obj01 | spec01 | c1 | 15:55 |
| host002 | obj02 | spec02 | c2 | 14:30 |
| host003 | - | - | - | - |
| host004 | obj01 | spec01 | c1 | 15:55 |
+---------+--------+---------------+------+-------+
我有几个表,如第二个,我需要连接所有这些表。当然,在firts表中可以有多个具有相同主机,相同规格等的行。 " - " sign是null()值,可以更改第二个表格布局。
我尝试了所有JOINS,现在我试图迭代整个表并进行比较,但我是QV的新手,我错过了一些像UPDATE这样的SQL功能。
感谢您的帮助。
答案 0 :(得分:1)
这是一个脚本,它并不完美,可能有一个更简洁的解决方案(!),但它适用于您的场景。
我重新安排了您的“复制表”,以便它有三列:
HOST SPECIFICATION TARGET_HOST
然后,您可以为要复制的其他主机重复行,如下所示:
HOST SPECIFICATION TARGET_HOST
host001 spec01 host004
host001 spec01 host003
脚本(我包含了一些虚拟数据,所以你可以尝试一下):
Source_Data:
LOAD * INLINE [
HOST, OBJECT, SPECIFICATION, COPY, LAST
host001, obj01, spec01 , c1, 15:55
host002, obj02, spec02 , c2, 14:30
host003
host004
];
Copy_Table:
LOAD * INLINE [
HOST, SPECIFICATION, TARGET_HOST
host001, spec01, host004
];
Link_Table:
NOCONCATENATE
LOAD
HOST & SPECIFICATION as %key,
TARGET_HOST
RESIDENT Copy_Table;
DROP TABLE Copy_Table;
LEFT JOIN (Link_Table)
LOAD
HOST & SPECIFICATION as %key,
HOST, OBJECT, SPECIFICATION, COPY, LAST
;
LOAD
*
RESIDENT Source_Data;
Complete_Data:
NOCONCATENATE LOAD
TARGET_HOST as HOST,
OBJECT, SPECIFICATION, COPY, LAST
RESIDENT Link_Table;
CONCATENATE (Complete_Data)
LOAD
*
RESIDENT Source_Data
WHERE NOT Exists(TARGET_HOST,HOST & SPECIFICATION); // old condition: WHERE NOT Exists(TARGET_HOST,HOST);
DROP TABLES Source_Data, Link_Table;