首页 > 编程问答 >如何使用 HANA SQL 导出层次结构输出?

如何使用 HANA SQL 导出层次结构输出?

时间:2024-07-27 13:18:11浏览次数:5  
标签:python hana hana-sql-script

我遇到了一些低于层次的要求。我有两列称为 COL1 COL2 ,想要导出值 ( MAP )。

COL1 COL2 有 4 种类型的关系,即 1:1、1:M、M:1、M :M.

解释 - 例如

  1. XX1 映射到 A1(临时结果 XX1 : A1)

  2. A1 映射到 XX3(临时结果 XX1, XX3 : A1)

  3. A1 映射到 XX3 (临时结果 XX1, XX3 : A1)

  4. XX3 映射到 A8 (临时结果 XX1, XX3 : A1, A8)

  5. A8 映射到 XX9 (临时结果 XX1, XX3, XX9 : A1, A8)| ||注意 - 遍历级别不固定,可以是任何级别。

SQL 解决方案是更优选的,Python 解决方案是最不优选的(在 Python 的情况下,我想从文件中读取数据,因为我无法连接通过Python到数据库)。

有什么办法可以实现吗?

我也将示例数据作为图像附加了。

COL1    COL2    Map
XX1     A1      XX1,XX3,XX9 : A1,A8
XX2     A2      XX2,XX4 : A2
XX3     A1      XX1,XX3,XX9 : A1,A8
XX4     A2      XX2,XX4 : A2
XX5     A3      XX5:A3
XX6     A4      XX5:A4,A5
XX6     A5      XX5:A4,A5
XX7     A6      XX7,XX8:A6:A7
XX7     A7      XX7,XX8:A6:A7
XX8     A6      XX7,XX8:A6:A7
XX8     A7      XX7,XX8:A6:A7
XX3     A8      XX1,XX3,XX9 : A1,A8
XX9     A8      XX1,XX3,XX9 : A1,A8

I have attached the sample data as an image as well.

Sample Data


为了使用HANA SQL导出层次结构输出,可以使用递归公用表表达式(CTE)。下面是一个基于提供的示例数据的可能解决方案:

WITH RECURSIVE Hierarchy AS (
  -- Anchor member: Starting point of the hierarchy
  SELECT 
    COL1, 
    COL2, 
    CAST(COL1 AS VARCHAR(100)) AS Hierarchy_COL1,
    CAST(COL2 AS VARCHAR(100)) AS Hierarchy_COL2
  FROM YourTable

  UNION ALL

  -- Recursive member: Traverse the hierarchy
  SELECT 
    t.COL1, 
    t.COL2, 
    CASE 
      WHEN h.Hierarchy_COL1 LIKE '%' || t.COL1 || '%' THEN h.Hierarchy_COL1
      ELSE h.Hierarchy_COL1 || ',' || t.COL1
    END AS Hierarchy_COL1,
    CASE 
      WHEN h.Hierarchy_COL2 LIKE '%' || t.COL2 || '%' THEN h.Hierarchy_COL2
      ELSE h.Hierarchy_COL2 || ',' || t.COL2
    END AS Hierarchy_COL2
  FROM YourTable t
  INNER JOIN Hierarchy h ON t.COL1 = h.COL2
)

-- Select distinct hierarchy paths and combine the results
SELECT DISTINCT 
  Hierarchy_COL1, 
  Hierarchy_COL2,
  Hierarchy_COL1 || ' : ' || Hierarchy_COL2 AS "Map"
FROM Hierarchy;

解释:

  1. 递归CTE(Hierarchy):
  2. Anchor Member: 这部分查询定义了递归的起点。它从表中选择 COL1 COL2 ,并将它们分别转换为字符串类型,存储在 Hierarchy_COL1 Hierarchy_COL2 列中。
  3. Recursive Member: 这部分查询递归地遍历层次结构。它将当前行 ( t ) 与前一个递归级别 ( h ) 的结果连接起来。使用 CASE 语句检查 Hierarchy_COL1 Hierarchy_COL2 中是否已存在当前的 COL1 COL2 值。如果存在,则保持不变;否则,将当前值添加到字符串中。

  4. 最终查询:

  5. 选择 Hierarchy_COL1 Hierarchy_COL2 Map 列,其中 Map 列是将 Hierarchy_COL1 Hierarchy_COL2 用冒号连接起来的字符串。
  6. 使用 DISTINCT 关键字删除重复的层次结构路径。

使用方法:

  1. YourTable 替换为的实际表名。
  2. 运行查询以生成层次结构输出。

输出:

| Hierarchy_COL1 | Hierarchy_COL2 | Map | |---|---|---| | XX1,XX3,XX9 | A1,A8 | XX1,XX3,XX9 : A1,A8 | | XX2,XX4 | A2 | XX2,XX4 : A2 | | XX5 | A3 | XX5 : A3 | | XX6 | A4,A5 | XX6 : A4,A5 | | XX7,XX8 | A6,A7 | XX7,XX8 : A6,A7 |

这将为提供所需的层次结构输出,其中 Map 列显示每个 COL1 值的完整层次结构路径。

标签:python,hana,hana-sql-script
From: 77936586

相关文章

  • 我没有 python 但我有 python3
    我最近格式化了我的笔记本电脑并安装了Ubuntu操作系统。我没有明确安装Python。为了检查它是否已预安装,我在终端中运行python--version并得到了这个:$python--versionCommand'python'notfound,butcanbeinstalledwith:sudoaptinstallpython3......
  • 基于YOLOv9的停车场空闲车位检测【python源码+UI界面+数据集+模型+语音报警+安装说明
    往期精品导航基于YOLOv9的脑肿瘤区域检测智慧课堂基于YOLOv8的学生上课行为检测基于YOLOv9+pyside的安检仪x光危险物物品检测(有ui)基于YOLOv9的PCB板缺陷检测基于YOLOv9的线路绝缘子缺陷检测【python源码+UI界面+数据集+模型+语音报警+安装说明】基于YOLOv9的道路状况检测【......
  • 1-python的数据类型与变量
    一、交互模式与脚本模式交互模式:就相当于一种问答模式,关闭即消失无法保存重用比如python自带的编译器脚本模式:可以将代码长期保存以及重复使用如何创建脚本模式:idle——file——newfile[快捷方式:idle——ctrl+n]保存:ctrl+s运行:F5二、变量(Variable)变量:会变化......
  • 2-Python数据类型——序列
    Python数据类型——序列一、序列序列是一个可以存放多个值的容器。有序序列:在序列中每个值都有对应的下标下标:就相当于酒店的房间号,方便客人的查找与酒店的管理在编程中下标的起始值与日常生活中的计数有所不同:下标的计数从0开始计数,从左往右计数:下标从0开始往右递......
  • 如何从HANA数据库读取ODQDATA blob字段?
    如何使用gzipbasXml作为python格式反编译SAPERP中的blob字段?就我而言,我想从ODQDATA表中读取字段“xdata”。我尝试使用gzip和zlib解压该对象,但没有成功(BadGzipFile:不是gzip压缩文件)。我自己也没有更多的想法了。importzlibimportgzipi......
  • crontab 运行 .sh 文件调用 python 脚本
    我有一个pythonselenium脚本,可以打开chrome并为我运行一些自动化任务。在crontab中直接调用python可以使用下面的行。:10.0是我运行echo$DISPLAY时得到的值。我使用的是Ubuntu22.04.4LTS5823**2DISPLAY=:10.0/usr/bin/python3/home/user/Script......
  • Pythonanywhere - ping:套接字:不允许操作
    请帮忙。我有一个Telegram机器人,当我从Bash控制台启动他时,它每60秒ping一次静态IP-它工作正常,但每天停止工作一次。我尝试使用“始终开启任务”,但在日志文件中收到“ping:套接字:不允许操作”。我有5美元帐户,我能做什么?从Bash控制台运行时我看到的内容:---17......
  • python+flask计算机毕业设计社区疫情防控物资调配平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,全球公共卫生事件的频发,尤其是新冠疫情的爆发,对社区治理与应急响应能力提出了前所未有的挑战。社区作为疫情防控的第一线,其物资调配......
  • python+flask计算机毕业设计四川工商学院疫情防控系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在全球新冠疫情持续蔓延的背景下,高校作为人员密集、流动性大的特殊场所,其疫情防控工作显得尤为重要。四川工商学院作为一所集教学、科研、......
  • python+flask计算机毕业设计企业人事管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与业务复杂度的提升,传统的人事管理方式已难以满足现代企业对高效、精准、自动化管理的需求。企业人事管理涉及员工......