【问题标题】:Dynamically generate Columns via sql query通过sql查询动态生成Columns
【发布时间】:2020-04-20 06:30:31
【问题描述】:

我有以下列的预约表

(Id_patient,date_appointment,time_appoitment)
Exp
14,29/12/2019,09:10
19,30/12/2019,11:30

我想创建一个生成这样结果的 sql 查询,我选择 29/12/2019 和 01/01/2020 之间的日期和 08:00 到 23:00 之间的预约时间

Time_appoitment,29/12/2019,30/12/2109,31/12/2019,01/01/2020
08:00.         ,Null      ,null      ,Null      ,Null
.
.
09:10          ,14        ,Null      ,Null      ,Null
.
.
11:30          ,Null      ,19        ,Null      ,Null

.

.
23:00          ,Null     ,Null       ,Null      ,Null

【问题讨论】:

  • 考虑将日期和时间存储为单个实体,使用适当的数据类型,然后处理应用程序代码中的数据显示问题
  • 草莓,谢谢,但请您详细说明您的答案。
  • 作为一项规则,mysql 和 tsql 标签是不兼容的(作为它们的描述状态)。您是否需要适用于两者的解决方案?奇怪的是,预约没有持续时间,即 10 分钟换油与 18 小时手术。你试过什么?你做了什么研究?是否涉及tally(或numbers)表和outer join?也许是pivot?你能为你的桌子提供 DDL 吗?
  • Time_appointment = time_start 增加 10 分钟

标签: mysql sql tsql multiple-columns dynamically-generated


【解决方案1】:

Markus Winand 在这篇文章中详细说明了这个答案:Pivot Rows to Columns

需要注意的段落: SQL 是一种静态类型语言:查询必须预先列出结果列。要对具有未知或动态属性的表进行透视,可以使用多集或文档类型(XML、JSON)来表示单个列中的键值存储。请参阅 listagg 的符合替代方案:文档类型。

基本上,您所要求的并不是 SQL(作为标准)旨在执行的操作。然而,在一些 RDBMS 系统中,有一种一次性的解决方案可以满足您的需求。建议您阅读有关 PIVOT、CROSSTAB 或类似内容的数据库文档。

【讨论】:

    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    相关资源
    最近更新 更多