Sap 表类型的动态创建

Sap 表类型的动态创建,sap,hana,Sap,Hana,我有一个单列的列表 我想创建一个表类型,将上述表列中的所有元素作为具有固定数据类型和大小的列名,并在函数中使用它 类似如下: 如有任何建议,将不胜感激 编辑: 为了完成一项工作,机器必须使用不同的工具对材料执行不同的工作 我有一个机器可以执行的作业列表和一个工具列表。用于特定作业的特定工具 每个作业都需要一个特定的工具和小时数(一旦达到ist更换时间,就要更换工具)。一个作业可以在一个产品上执行多次。(在这种情况下,如果作业执行1小时=工具已使用1小时) 对于每个产品,一组工具将按顺序工作。因

我有一个单列的列表

我想创建一个表类型,将上述表列中的所有元素作为具有固定数据类型和大小的列名,并在函数中使用它

类似如下:

如有任何建议,将不胜感激

编辑:

为了完成一项工作,机器必须使用不同的工具对材料执行不同的工作

我有一个机器可以执行的作业列表和一个工具列表。用于特定作业的特定工具

每个作业都需要一个特定的工具和小时数(一旦达到ist更换时间,就要更换工具)。一个作业可以在一个产品上执行多次。(在这种情况下,如果作业执行1小时=工具已使用1小时)

对于每个产品,一组工具将按顺序工作。因此,我需要每个产品的报告,该工具的工作小时数

编辑2:

产品表

---------+-----+
ProductID|Jobs |
---------+-----+
 1       | job1 |
 1       | job2 |
 1       | job3 |
 1       |  .   |
 1       |  .   |
 1       |100th |
 2       | job1 |
 2       |  .   |
 2       |  .   |
 2       |200th |
工作表

-------+-------+-------
Jobs   |  tool | time
-------+-------+-------
 job1  |tool 10| 2
 job1  |tool 09| 1
 job2  |tool 11| 4
 job3  |tool 17| 0.5
所需报告(此表实际不存在)


根据增加的信息,这里有两个主要要求:

  • 您要根据所涉及的作业汇总生产每个产品所花费的时间
  • 您希望有一个交叉表报告,显示从步骤1到产品和作业的时间
  • 对于第一点,您可能可以使用如下查询:

    SELECT 
        p.product_id,
        j.jobs,
        SUM(j.time) as SUM_TIME
    FROM 
       products p
     INNER JOIN jobs j
     ON p.jobs = j.jobs  
    GROUP BY  
        p.product_id,
        j.jobs;
    
    对于第二部分:这通常称为透视报告。 SAP HANA不提供动态SQL命令来生成这种形式的输出(其他DBM也有)。 然而,这种动态转换通常与数据表示相关,而与处理无关


    因此,由于您可能希望在此报告中使用某种形式的前端(例如MS Excel、Crystal Reports、Business Objects X、Tableau等),我建议您在前端报告中进行转换和格式化。寻找“枢轴”或“交叉表”选项来实现这一点。

    这听起来像是一种不太聪明的大锤式方法。那是什么“东西”?如果您稍微解释一下用例,可能会有更好的选择。嗨,Lars Br。添加了我为什么需要它的附加信息。好的,我已经阅读了您添加的要求。但是在这种情况下,您需要为什么创建一个表呢?为什么不能使用工具加入作业并聚合时间?对于每个产品,每个作业/工具需要报告多少小时。第一个coulmn将是productID。时间根据为产品放置的金属形状而变化。您给出的建议是无论如何都要对作业和工具聚合进行操作。也许您可以提供您现在拥有的表定义、一些测试数据以及输出应该是什么样子。根据描述,我不明白为什么您的数据结构应该是动态的。谢谢Lars,我理解HANA不提供PIVOT。我需要这份陈述书以便进一步处理。编写sqls的最佳实践是什么。编写存储过程和功能还是纯SQL脚本?为了让生活变得简单,我正在编写存储过程和功能,但它们会占用很多时间。我想听听你的意见并提出一些建议。你能分享一下你的处理要求吗?在我的经验中,使用交叉表作为进一步处理的输入是相当少见的,因为它更多地是关于人类读者的光学表示,而不是关于如何处理数据。hana中的PAL需要交叉表格式。
    SELECT 
        p.product_id,
        j.jobs,
        SUM(j.time) as SUM_TIME
    FROM 
       products p
     INNER JOIN jobs j
     ON p.jobs = j.jobs  
    GROUP BY  
        p.product_id,
        j.jobs;