这可以通过一个包含所有数据的查询以及单独的查询(每个部分一个)来实现。
但可能每个部分的列差异很大,所以第二种方法通常更好,所以我只给你第二种方法的想法。
我猜您的 USER 查询中有一个 USER_ID 列或其他任何内容,并且您想使用此列来限制其他每个部分中的数据。
为简单起见,我假设您的数据集称为 USER、ORDERS、PAYMENTS 等。
思路如下:
对于布局,使用以下构造(项目类型和“名称”,您应该始终为容器项目定义名称作为最佳实践):
List "List_USER"
Detail
Grid "Grid_USER"
-- shows a USER records columns in its cells.
Table "Table_ORDERS"
Table "Table_PAYMENTS"
Table "Table_PAYMENT_HISTORY" (*)
“List_USER”绑定到数据集 USER。
“Grid_USER”未绑定,它从“List_USER”继承绑定。
“Table_ORDERS”绑定到数据集 ORDERS。
“Table_PAYMENTS”绑定到数据集 PAYMENTS。
“Table_PAYMENT_HISTORY”绑定到数据集 PAYMENT_HISTORY。
最后三个表和它们的数据集(例如细节)需要特殊处理,我将在“Table_ORDERS”中展示这个。
数据集(例如 ORDERS)需要一个数据集参数 param_USER_ID。
SQL 查询需要一个在 WHERE 子句中使用的绑定变量(使用语法 ? 或 :USER_ID,如果您在 Oracle 上),通常看起来像
SELECT ORDERS.ORDER_ID
, ORDERS.ORDER_DATE -- and so on
FROM ORDERS
WHERE ORDERS.USER_ID = ?
-- 在 Oracle 上,您可能希望使用 WHERE ORRDERS.USER_ID = :P_USER_ID,这将允许在 Oracle SQL*Developer 中测试您的查询。
请注意,SQL 中的数据集参数和绑定变量出现是按位置映射的,第一个数据集参数对应于第一个 ? 等等。
在“Table_ORDERS”“Binding”选项卡中,打开“Data Set Parameter Binding...”对话框并将值 row["USER_ID"] 分配给数据集参数 param_USER_ID。
请注意,您可以从编辑对话框中的“可用列绑定”中进行选择。另请注意,“确定”只是关闭该对话框。要实际选择一个列绑定,您需要双击,例如,双击 USER_ID 会将文本 row["USER_ID"] 复制到表达式文本中。