[英]SQL Server: merge two rows of data from same table and save into another table
[英]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.