Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL DB2:如何使用“运行总计计算”连接Dynamicly 2表_Sql_Db2 400 - Fatal编程技术网

SQL DB2:如何使用“运行总计计算”连接Dynamicly 2表

SQL DB2:如何使用“运行总计计算”连接Dynamicly 2表,sql,db2-400,Sql,Db2 400,我正在学习服务器上的SQL:IBMV7R1M0,DB2 我正在尝试构建一个SQL报表。 在寻找了几天类似的例子后,我在知识的海洋中发射了这个瓶子 背景: 商店向仓库索取货物。 那些货物是用货盘挑的。 在将这些货盘装入卡车之前,将其放在暂存车道上 规则1:我们只需要一个货架上的货盘,我们不想把不同货架上的货盘混在一起 规则2:商店将占用附近的暂存通道 规则3:暂存车道按有间隙的there ID排序 表1: |-----|-----|-----------------| | ID |store|p

我正在学习服务器上的SQL:IBMV7R1M0,DB2

我正在尝试构建一个SQL报表。 在寻找了几天类似的例子后,我在知识的海洋中发射了这个瓶子

背景: 商店向仓库索取货物。 那些货物是用货盘挑的。 在将这些货盘装入卡车之前,将其放在暂存车道上

规则1:我们只需要一个货架上的货盘,我们不想把不同货架上的货盘混在一起

规则2:商店将占用附近的暂存通道

规则3:暂存车道按有间隙的there ID排序

表1:

|-----|-----|-----------------|
| ID  |store|pallet_estimation|
|-----|-----|-----------------|
| 1   | A   | 35              |
| 2   | C   |  2              |
| 3   | B   | 30              |
|-----|-----|-----------------|

SELECT * FROM (
    VALUES (1, 'A', 35), (2, 'C', 2), (3, 'B', 30)
          ) T1(ID, store, pallet_estimation) 
表2:

|---------------|---------------|
|ID_staging_lane|pallet_capacity|
|---------------|---------------|
| 201           | 10            |
| 202           | 10            |
| 204           | 30            |
| 205           | 40            |
| 208           | 30            |
| 210           | 30            |
|---------------|---------------|

SELECT * FROM(
  VALUES (201, 10), (202, 10), (204, 30), (205, 40), (208, 30), (210, 30)
     ) T2(ID_staging_lane, pallet_capacity)
预期结果:

|-----------|--------|--------------------|---------------|------------------|
|T1_sequence|T1_store|T1_pallet_estimation|T2_staging_lane|T2_pallet_capacity|
|-----------|--------|--------------------|---------------|------------------|
| 1         | A      | 35                 | 201           | 10               |
| 1         | A      | 35                 | 202           | 10               |
| 1         | A      | 35                 | 204           | 30               |
| 2         | C      |  2                 | 205           | 40               |
| 3         | B      | 30                 | 208           | 30               |
|-----------|--------|--------------------|---------------|------------------|
查尔斯,谢谢你抽出时间。 我会努力提高我的要求

如果需要,我想按照顺序在几个分段车道上拆分/划分托盘_估算

例如:

For store A which has 35 pallets, 
I want to use staging lane 201 then it remains 35 - 10 = 25 , 
then I want to use staging lane 202 then it remains 25 - 10 = 15, 
then I want to use staging lane 204 then it remains 15 - 30 = -15

then I want to continue with the store C on the next staging lane 205 then it remains 2 - 40 = -38

then I want to continue with the store B on the next staging lane 208 then it remains 30 - 30 = 0
你将如何开始构建它? -有窗口功能吗?合计 -使用递归SQL?声明获取 -是否可以在SQL中构建动态联接? -其他想法

提前感谢,


雷诺

首先,v7r1非常古老……准确地说是10年

第二,我不明白你想加入什么…我看不到任何东西可以解释为什么商店A的结果是3行

第三,在任何RDBMS中都没有动态连接。您可以有一个动态语句,其中可以包含一个join。或者您可以有一个静态语句,它也可以包含一个join。对于IBMi上的Db2,只有在将语句合并到RPG/COLBOL程序或SQL存储过程/函数中时才重要

说到这里,让我向您介绍常见的表表达式CTE。基本上与嵌套表表达式NTE相同,但我更容易理解,而且CTE在i上也比NTE有性能优势

with T1 as (
  SELECT * FROM (
    VALUES (1, 'A', 35), (2, 'C', 2), (3, 'B', 30)
          ) T1(ID, store, pallet_estimation)
), T2 as (
SELECT * FROM(
  VALUES (201, 10), (202, 10), (204, 30), (205, 40), (208, 30), (210, 30)
     ) T2(ID_staging_lane, pallet_capacity)
), fitment as (
select T1.*, T2.*, row_number() OVER(partition by ID_STAGING_LANE) as rowNbr
from T1 join T2 on pallet_estimation <= pallet_capacity
)
select * from fitment where rowNbr = 1;
带T1 as的是常用的表表达式;T2和安装也是如此。with关键字仅用于第一个CTE

设备CTE连接T1和T2,根据该估算适合车道描述,为每个可能性分配一个行号。最终选择对每个车道进行第一次拟合

CTE的好处在于,您可以轻松地构建它们,并在进行过程中看到结果。在任何时候,您都可以从MYCTE添加select*并查看到目前为止的情况

注意,如图所示,一个CTE可以引用另一个CTE。安装参考T1和T2

编辑 在结果集中向前或向后使用的函数名为LAG和LEAD。它们是内置DB2fori的一部分。不幸的是,它们是在7.3添加的

您需要使用用户定义的函数UDF滚动您自己的版本,该函数使用已知的scatchpad来保存每行函数调用之间的数据

我发现了一篇非常古老的文章,展示了如何在RPG中使用scratch pad。您还可以在SQL定义的UDF中使用它


用谷歌搜索一下,看看你是否可以开始。如果遇到问题,请在此处创建新问题。或者查看

你好,查尔斯,谢谢你抽出时间。