Skip to content

123a123-hh/sql-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏥 HIS SQL 生成器

可视化 SQL 查询生成工具,专为 HIS 系统复杂多表查询设计。医护人员点点鼠标就能生成正确的 SQL,不用记表名和字段。


✨ 全部功能

类别 功能
📊 数据字典 Excel 导入/导出、JSON 粘贴、自动保存到浏览器、搜索过滤
👆 字段选择 点击选择、单表字段搜索、table.* 全选、拖拽排序、聚合函数设置
🔗 多表关联 同名字段自动推荐 JOIN 条件、支持 INNER/LEFT/RIGHT/FULL JOIN
🎯 筛选过滤 WHERE 多条件组合(AND/OR)、支持 =/≠/</>/≤/≥/LIKE/IN/BETWEEN/IS NULL
📈 聚合统计 COUNT/SUM/AVG/MAX/MIN、GROUP BY 分组、HAVING 二次筛选
📶 排序分页 ORDER BY 升序/降序、LIMIT 条数限制、DISTINCT 去重
🔄 嵌套子查询 主查询 + 子查询、支持 FROM 派生表 / WHERE IN/NOT IN / EXISTS 四种引用方式
💡 大表适配 字段列表滚动容器、单表字段搜索、字段描述悬停显示完整内容

🚀 快速开始

1. 打开工具

用浏览器直接打开 index.html,无需服务器,无需安装。

2. 加载示例

点击右上角「📋 加载示例」,工具会自动导入 3 张 HIS 核心表示例数据:

  • patient - 患者信息表(6 个字段)
  • fee_bill - 费用账单表(4 个字段)
  • inpatient - 住院记录表(6 个字段)

3. 选择表和字段

点击左侧表卡片选中 → 字段列表自动展开 → 点击字段加入 SELECT:

  • ✅ 表选中状态 → 紫色高亮显示
  • ✅ 字段选中状态 → 蓝色文字 + 背景
  • ✅ 字段后面的灰色小字是字段注释,鼠标悬停看完整内容

4. 配置查询

操作 位置 说明
JOIN 关联 中间上方「🔗 JOIN」卡片 选 ≥ 2 张表后自动弹出
WHERE 筛选 中间右侧「🎯 WHERE」 点击「+ 添加」新增条件
GROUP BY 分组 中间右侧「📊 GROUP BY」 点击「+ 添加」新增分组字段
HAVING 筛选 中间右侧「🔍 HAVING」 添加 GROUP BY 后才显示
ORDER BY 排序 中间右侧「📶 ORDER BY」 点击「+ 添加」新增排序
DISTINCT / LIMIT 中间最下方「⚙️ 选项」 勾选去重或输入限制条数

5. 复制 SQL

右侧实时预览生成的 SQL,点击「📋 复制 SQL」直接粘贴到数据库客户端。


📋 数据字典导入

方式一:Excel 导入(推荐)

导出模板

  1. 点击右上角「📤 导出 Excel 模板」
  2. 模板包含 5 列:
列名 说明 示例
表名 必填,表的英文名称 patient
表描述 可选,表的中文说明 患者信息表
字段名 必填,字段英文名称 patient_id
字段类型 必填,字段数据类型 varchar
字段说明 可选,字段中文含义 患者ID

导入

  1. 点击右上角「📥 导入数据字典」
  2. 切换到「Excel 导入」标签
  3. 拖拽 .xlsx 文件到虚线框,或点击「选择 Excel 文件」
  4. 工具自动解析并显示预览
  5. 确认表名和表描述 → 点击「确认导入」

💡 兼容旧格式:旧版只有 3 列(字段名/字段类型/字段说明)的 Excel 也能正常导入,表名从文件名自动提取。


方式二:JSON 粘贴

  1. 点击右上角「📥 导入数据字典」
  2. 切换到「JSON 粘贴」标签
  3. 粘贴如下格式的 JSON:
[
  {
    "tableName": "patient",
    "tableComment": "患者信息表",
    "fields": [
      { "name": "patient_id", "type": "varchar", "comment": "患者ID" },
      { "name": "name", "type": "varchar", "comment": "姓名" },
      { "name": "age", "type": "int", "comment": "年龄" }
    ]
  },
  {
    "tableName": "fee_bill",
    "tableComment": "费用账单表",
    "fields": [
      { "name": "bill_id", "type": "varchar", "comment": "账单ID" },
      { "name": "amount", "type": "decimal", "comment": "金额" }
    ]
  }
]
  1. 点击「确认导入」

🔍 搜索功能

全局搜索(左侧顶部)

在搜索框输入任意文字,支持:

  • 表名搜索
  • 表描述搜索
  • 字段名搜索
  • 字段注释搜索

匹配的文字会 黄色高亮 显示。

单表字段搜索(表内)

当表的字段 ≥ 5 个时,字段列表顶部会自动出现搜索框:

  • 输入关键字实时过滤
  • 搜索范围:字段名 + 字段注释 + 字段类型
  • 无匹配时显示「无匹配字段」

💡 为什么自动?:HIS 系统很多大表有 100+ 字段,直接翻找效率太低。


📝 字段操作

选择/取消字段

点击字段即可切换选中状态:

  • 未选中 → 灰色文字
  • 已选中 → 蓝色文字 + 浅色背景

添加 table.*

当你需要查某表所有字段时:

  1. 点击字段列表最底部的虚线按钮「➕ 全部字段 (表名.*)」
  2. table.* 会作为一个特殊条目加入 SELECT
  3. 可以拖拽调整位置,也可以单独删除

💡 场景patient_id, patient.* - 主键放最前面,后面跟所有字段

拖拽排序

字段左侧的 ⋮⋮ 手柄就是拖拽区域:

  1. 按住任意字段的 ⋮⋮ 拖动
  2. 目标位置显示蓝色插入线
  3. 松开即完成排序

设置聚合函数

每个字段右边有一个下拉框(默认显示「—」):

  • COUNT - 计数
  • SUM - 求和
  • AVG - 平均值
  • MAX - 最大值
  • MIN - 最小值

切换聚合目标

选了聚合函数后,下拉菜单底部会列出所有已选字段:

  1. 点击 ↪ 目标字段名
  2. 聚合函数会从当前字段迁移到目标字段
  3. 目标字段会自动加入 SELECT(如果还没选)

💡 场景:本来选了 SUM(patient.age),想改成 SUM(fee_bill.amount),直接选就行,不用先取消再重选。


🔗 JOIN 关联

自动推荐

当你选中 ≥ 2 张表时,工具会自动识别同名字段作为默认 JOIN 条件。

例如同时选 patientfee_bill,两张表都有 patient_id 字段:

  • 默认 JOIN 类型:INNER JOIN
  • 默认关联字段:patient.patient_id = fee_bill.patient_id

手动调整

每张表之间的关联都可以单独调整:

  1. 左表字段 - 下拉选择
  2. JOIN 类型 - INNER / LEFT / RIGHT / FULL
  3. 右表字段 - 下拉选择

🎯 WHERE 条件

添加条件

点击「+ 添加」按钮新增条件行:

说明
逻辑符 第一个条件不显示,后续条件可选 AND / OR
字段 下拉选择所有已选表的字段
操作符 = / ≠ / < / > / ≤ / ≥ / LIKE / IN / NOT IN / BETWEEN / IS NULL / IS NOT NULL
输入框,IS NULL / IS NOT NULL 时自动禁用

删除条件

点击条件行最右侧的 ✕ 按钮。


📊 聚合统计 (GROUP BY + HAVING)

场景:按科室统计人数

  1. patient 表 → 选 dept_name 字段
  2. 字段聚合下拉选 COUNTCOUNT(dept_name)
  3. 添加 GROUP BY → 选 dept_name
  4. 生成的 SQL:
SELECT
  patient.dept_name,
  COUNT(patient.dept_name)
FROM patient
GROUP BY patient.dept_name

二次筛选 (HAVING)

添加 GROUP BY 之后才能加 HAVING:

  1. 点击「+ 添加」新增 HAVING 条件
  2. 选择聚合函数(COUNT/SUM/AVG)
  3. 选择字段(可选 * 或具体字段)
  4. 选择操作符和值

例如:筛选人数 ≥ 10 的科室

SELECT
  patient.dept_name,
  COUNT(*)
FROM patient
GROUP BY patient.dept_name
HAVING COUNT(*) >= 10

🔄 嵌套子查询

新建子查询

点击顶部标签栏最右侧的「+ 子查询」按钮。

子查询引用方式

在子查询页面的「📌 引用方式」下拉中选择:

类型 说明 示例
FROM 子查询作为派生表 FROM (SELECT ...) AS sub1
WHERE IN 字段值在子查询结果中 WHERE patient_id IN (SELECT ...)
WHERE NOT IN 字段值不在子查询结果中 WHERE patient_id NOT IN (SELECT ...)
WHERE EXISTS 子查询至少返回一行 WHERE EXISTS (SELECT ...)

父查询字段

当引用方式是 IN / NOT IN 时,需要选择父查询的字段作为关联键:

  1. 点击「父查询字段」下拉
  2. 列出父查询所有已选字段
  3. 直接选择即可

删除子查询

点击子查询标签最右侧的 ✕ 按钮(主查询不能删)。

💡 深度嵌套:子查询还可以继续加子查询,支持无限层级嵌套


⚙️ 选项

DISTINCT

勾选后自动在 SELECT 前面加 DISTINCT,去除重复行。

LIMIT

输入数字,限制返回的行数(例如 100 = 只返回前 100 条)。


💡 HIS 系统查询示例

示例 1:今日出院患者列表

SELECT
  patient.patient_id,
  patient.name,
  patient.gender,
  patient.age,
  inpatient.in_date,
  inpatient.out_date
FROM patient
INNER JOIN inpatient ON patient.patient_id = inpatient.patient_id
WHERE inpatient.out_date = '2026-04-26'

示例 2:各科室住院总费用(含 HAVING 筛选)

SELECT
  patient.dept_name,
  SUM(fee_bill.amount) AS 总费用
FROM patient
INNER JOIN fee_bill ON patient.patient_id = fee_bill.patient_id
INNER JOIN inpatient ON patient.patient_id = inpatient.patient_id
GROUP BY patient.dept_name
HAVING SUM(fee_bill.amount) >= 10000
ORDER BY SUM(fee_bill.amount) DESC

示例 3:子查询 - 还没出院的患者

SELECT * FROM patient
WHERE patient_id IN (
  SELECT patient_id FROM inpatient
  WHERE status = '在院'
)

🔧 数据保存

  • 数据字典:自动保存到浏览器 LocalStorage,刷新不丢失
  • 查询配置:已选的表、字段、JOIN、WHERE 等全部自动保存
  • 子查询配置:子查询的所有设置也会自动保存

⚠️ 清除浏览器缓存会丢失数据,重要的数据字典请保留 Excel 备份。


📂 文件说明

sql-generator/
├── index.html          # 主页面
├── app_core.js         # 核心逻辑(状态管理、渲染)
├── app_actions.js      # 操作函数(SQL生成、导入导出)
├── app.js              # 旧版(保留兼容)
└── README.md           # 使用说明 ← 你正在看的

✅ 开发时间线

日期 里程碑
2026-04-25 基础版本(SELECT/WHERE/ORDER BY/Excel导入)
2026-04-25 聚合函数 + GROUP BY + HAVING + 现代化UI
2026-04-25 嵌套子查询 + 四种引用方式
2026-04-25 字段搜索高亮 + 子查询字段下拉选择器
2026-04-25 字段拖拽排序 + table.* 折叠支持 + 子查询删除
2026-04-26 选择表默认首字段 + table.* 可拖拽条目
2026-04-26 聚合目标切换 + 大表滚动容器 + 单表字段搜索
2026-04-26 字段描述悬停显示 + Excel 5 列新格式

🎯 设计理念

让医护人员零门槛查数据

  • 不用记表名 — 中文表名 + 搜索
  • 不用记字段名 — 字段注释 + 描述悬停
  • 不用写 JOIN — 自动识别关联字段
  • 不用背语法 — 点点鼠标生成标准 SQL
  • 不用怕大表 — 100+ 字段照样搜、照样滚

About

可视化 SQL 查询生成工具,专为 HIS 系统复杂多表查询设计

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors