gpt4 book ai didi

sql - 将存储的事件转换为单个记录

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:14 24 4
gpt4 key购买 nike

我目前正在开展一个项目,该项目需要使用以如下所示格式存储在 SQL 数据库中的数据。

我需要做的是获取这些数据并创建一个以 ID 和事件日期为键控的多列单记录,但我很难找到一个工具来提供帮助。虽然我在网上找到了一些关于事件驱动处理程序的信息,但问题是虽然我的标签上写着“事件”,但真正存储的是称为“事件”的单独数据片段,这些数据通常是单独的条目,但并非总是如此,同时输入并有助于整个事件条目。如果这看起来有点令人困惑,我很抱歉,但我正在使用一个我无法控制更改的系统,我只需要对数据进行有用的理解。

这是一个正在运行的示例,说明了我需要将其转换为单个记录的数据库中存储的内容;

ID      Event           Event Result  Event Result Value            Event Date      Entered By
909909 Status Change No no 10/25/12 23:10 Doe, John
909909 Disposition Remuni Remains in place 10/25/12 23:10 Doe, John
909909 Event duration 15mins 15mins 10/25/12 23:10 Doe, John
909909 Event end time 23:25 23:25 10/25/12 23:10 Doe, John
909909 Event start time 23:10 23:10 10/25/12 23:10 Doe, John
909909 Event type Iniqrs Initial System activation 10/25/12 23:10 Doe, John

进入如下单条记录;

ID      Event Start Event End   Moved               Action Taken                Entered By
909909 23:10 23:25 Remains in place Initial System activation Doe, John

提前感谢您提供的任何帮助。

最佳答案

虽然我同意 Bailey S. 的观点,即 Postgres 是“地球上最好的数据库引擎”,但我也看到您正在使用 SQL Server。

您需要的 MSSQL 函数称为“Pivot”函数,您可以找到文档 here .

最初设置可能有点棘手,但它是完全可行的,并且会为您提供所需的结果。


或者,有一种称为“自连接”的技术,它看起来像这样:

SELECT
[T1].[ID],
[StatusChange].[EventResultValue] AS 'StatusChange',
[Disposition].[EventResultValue] AS 'Disposition',
...
FROM
(
SELECT DISTINCT
[EventsTable].[ID]
FROM
[EventsTable]
) AS [T1] LEFT OUTER JOIN
[EventsTable] AS [StatusChange] ON [T1].[ID] = [StatusChange].[ID] AND [StatusChange].[Event] = 'Status Change' LEFT OUTER JOIN
[EventsTable] AS [Disposition] ON [T1].[ID] = [Disposition].[ID] AND [Disposition].[Event] = 'Disposition' LEFT OUTER JOIN
...

一点警告:
如果您使用此技术,它会在每次在 FROM 子句中列出时调用该表。如果您需要多个列或表中有大量记录,则可能会降低性能。


另一种选择是同时使用 group 和 case 语句:

SELECT
[ID],
MAX(CASE WHEN [Event] = 'Status Change' THEN [EventResult] ELSE NULL END) AS [Event Start],
MAX(CASE WHEN [Event] = 'Disposition' THEN [EventResult] ELSE NULL END) AS [Event End]
...
FROM
[EventsTable]
GROUP BY
[ID]

一个更大的警告:
如果您使用此技术,则保证每个 [ID] 只返回一条记录。如果您有多个相同类型的事件(即对于任何给定的 ID,事件开始时间可能出现两次,那么不要使用它,因为其中一些记录将不会被返回。

关于sql - 将存储的事件转换为单个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13166590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com