【问题标题】:Dynamic creation of Table typeTable类型的动态创建
【发布时间】:2017-08-07 08:00:45
【问题描述】:

我有一个单列的列表。

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

类似如下:

Dynamic creation of table in tsql

任何建议将不胜感激。

编辑:

要完成一个产品,机器必须使用不同的工具对材料执行不同的作业。

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

每项工作都需要特定的工具和小时数(一旦达到更换时间就更换工具)。一个作业可以在一个产品上执行多次。 (在这种情况下,如果作业执行 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

必需的报告(此表实际上并不存在)

----------+------+------+------+------+------+-----
productID | job1 | job2 | job3 | job4 | job5 | . . .
----------+------+------+------+------+------+------
1         | 20   |  10  |  5   |  .   |   .  | .
----------+------+------+------+------+------+------
2         | 10   |  13  |  5   |  .   |   .  | .
----------+------+------+------+------+------+------

【问题讨论】:

  • 这听起来像是一种不太聪明的大锤方法。那“东西”是什么?如果您稍微解释一下用例,可能会有更好的选择。
  • 嗨拉尔斯兄弟。添加了我为什么需要它的附加信息。
  • 好的,我已经阅读了您的附加要求。但是在这种情况下,您需要为什么创建表?为什么不能用 TOOLS 加入 JOBS 并聚合时间?
  • 对于每个产品 - 每个作业/工具需要报告多少小时。第一列将是 productID。时间因放置产品的金属形状而异。您给出的建议无论如何都要为作业和工具聚合完成。
  • 也许您可以提供您现在拥有的表定义、一些测试数据以及输出应该是什么样子。根据描述,我不明白为什么您的数据结构应该是动态的。

标签: sap hana


【解决方案1】:

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

  1. 您想按所涉及的工作对生产每种产品所花费的时间进行汇总
  2. 您希望有一个跨表报告,显示从第 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;

对于第二部分:这通常称为 PIVOT 报告。 SAP HANA 不提供用于以这种形式生成输出的动态 SQL 命令(其他 DBMS 有)。 但是,这种动态转换通常与数据表示相关,而与处理无关。

因此,由于您可能希望为此报告使用某种形式的前端(例如 MS Excel、Crystal Reports、Business Objects X、Tableau,...),我建议您在前端报告中进行转换和格式化。寻找“PIVOT”或“CROSSTAB”选项来执行此操作。

【讨论】:

  • 谢谢 Lars,我知道 HANA 不提供 PIVOT。我需要这个表示来进一步处理。什么是编写 sqls 的最佳实践。编写存储过程和函数还是纯 SQL 脚本?为了让生活更轻松,我正在编写存储过程和函数,但它们会消耗大量时间。我想听取您的意见并提出一些建议。
  • 您能分享一下您的处理要求吗?在我的经验中,使用交叉表作为进一步处理的输入相当少见,因为它更多地是关于人类读者的光学表示,而不是关于人们可以对数据做什么。
  • hana 中的 PAL 需要交叉表格式。
猜你喜欢
  • 2011-12-21
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多