繁体   English   中英

SQL Server:合并同一表的两行

[英]SQL Server: Merge two rows of same table

我正在尝试以以下方式合并表中的行。

该表包含有关对 API 进行的请求、响应、请求时间和响应时间的日志。

请在此处找到所附图片。

所需输出中的请求和响应列都从基表的消息列填充。

同样,所需输出中的 RequestTime 和 ResponseTime 列都是从基表的 Date 列填充的。

我已经尝试了下面的代码,它得到了我想要的输出,但我认为这不是正确的方法。

ALTER PROCEDURE [dbo].[GetPackageRequestResponseDetails]
    @PACKAGEID VARCHAR(20)  
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @ApiLogDump TABLE
    (
        Date DATETIME,
        Thread VARCHAR(255),
        Logger VARCHAR(255),
        Message VARCHAR(4000)
    )

    INSERT INTO @ApiLogDump
    (
        Date,
        Thread,
        Logger,
        Message
    )
    SELECT
        Date,
        Thread,
        Logger,
        Message
    FROM APILog
    WHERE Logger LIKE '%GetPackageDetails%'
    AND Message LIKE '%'+@PACKAGEID+'%'

    DECLARE  @ApiLogMerge TABLE
    (
        Thread VARCHAR(255),
        Request VARCHAR(4000),
        Response VARCHAR(4000),
        RequestTime DATETIME,
        ResponseTime DATETIME
    )

    INSERT INTO @ApiLogMerge
    (   
        Thread,
        Request,
        Response,
        RequestTime,
        ResponseTime
    )
    SELECT 
        Thread,
        Message,
        Null,
        Date,
        Null
    FROM @ApiLogDump
    WHERE Message LIKE '%Request:'+@PACKAGEID+'%'


    UPDATE @ApiLogMerge
        SET Response = A.Message,
            ResponseTime = A.Date
    FROM @ApiLogMerge AP JOIN @ApiLogDump A
       ON AP.Thread = A.Thread
    WHERE Message LIKE '%Response:{"PackageID":"'+@PACKAGEID+'"%'

    SELECT * FROM @ApiLogMerge ORDER BY RequestTime DESC

END

任何帮助将不胜感激。

使用 GROUP BY 和其他条件尝试以下逻辑。

SELECT Thread,
MAX(CASE WHEN LEFT(Message,7) = 'Request' THEN Message ELSE NULL END) Request,
MAX(CASE WHEN LEFT(Message,8) = 'Response' THEN Message ELSE NULL END) Response,
MAX(CASE WHEN LEFT(Message,7) = 'Request' THEN Date ELSE NULL END) RequestTime,
MAX(CASE WHEN LEFT(Message,8) = 'Response' THEN Date ELSE NULL END) ResponseTime
FROM BaseTable
GROUP BY Thread

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM