0

我无法弄清楚如何根据另一个表中的值替换存储过程结果中的值。我有一个格式如下的表 [LOG]:

TIME STAMP, TAG, DESCRIPTION, EVENTCODE, SUBEVENTCODE
30-Aug-2013 10:14:10, TAG X, HI TEMP FAULT, 3, 16 
30-Aug-2013 10:12:10, TAG Y, HI PRESS FAULT, 3, 16
...

另一个表 [EVENTS] 基本上描述了 EVENTCODE 是什么:

EVENT, DESCRIPTION 
1, FAULT
2, LOGIC
3, ALARM

我想让存储过程检索第一个表的 2000 个条目(行),而不是将 EVENTCODE 显示为数字,而是在结果中显示第二个表中包含的描述。例如:

TIME STAMP, TAG, DESCRIPTION, EVENTCODE, SUBEVENTCODE
30-Aug-2013 10:14:10, TAG X, HI TEMP FAULT, ALARM, 16 

原因是我有另一个与存储过程的结果交互的软件,并且不想创建另一个表来将这些结果保存在数据库中。

到目前为止,存储过程如下所示:

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[Get2kEvents]
AS
BEGIN

SELECT TOP 2000 CAST(datepart(day,TIME_STAMP) as char(2)) + '-' + 
CAST(datename(month,TIME_STAMP) as char(3)) + '-' + 
CAST(datepart(year,TIME_STAMP) as char(4))+ ' ' + CONVERT(varchar,TIME_STAMP,108)
as 'TIME STAMP', 
[TAG], 
[DESCRIPTION],
[EVENTCODE], 
[SUBEVENTCODE]
FROM [Arc_DB].[dbo].[LOG]
ORDER BY TIME_STAMP DESC

END
GO 

感谢您的帮助。抱歉,如果这太基本了,但是在浏览此网站和其他网站时,我无法找到解决方案。

干杯。

TM值

4

3 回答 3

0

我会使用左连接并检查丢失的代码:

SELECT TOP 2000 CAST(datepart(day,TIME_STAMP) as char(2)) + '-' + 
CAST(datename(month,TIME_STAMP) as char(3)) + '-' + 
CAST(datepart(year,TIME_STAMP) as char(4))+ ' ' + CONVERT(varchar,TIME_STAMP,108)
as 'TIME STAMP', 
[TAG], 
[DESCRIPTION],
CASE WHEN EVENTS.DESCRIPTION IS NULL
     THEN 'UNKNOWN CODE '+CAST(LOG.EVENTCODE AS VARCHAR(20)) 
     ELSE EVENTS.DESCRIPTION
END AS [Event Type],
[EVENTCODE], 
[SUBEVENTCODE]
FROM LOG
LEFT JOIN EVENTS ON EVENTS.EVENT= LOG.EVENTCODE

ORDER BY TIME_STAMP DESC
于 2013-08-30T14:06:07.853 回答
0

你想要join两张桌子。IE:

SELECT TOP 2000 CAST(datepart(day,TIME_STAMP) as char(2)) + '-' + 
CAST(datename(month,TIME_STAMP) as char(3)) + '-' + 
CAST(datepart(year,TIME_STAMP) as char(4))+ ' ' + CONVERT(varchar,TIME_STAMP,108)
as 'TIME STAMP', 
[TAG], 
[DESCRIPTION],
Events.Description, 
[SUBEVENTCODE]
FROM [Arc_DB].[dbo].[LOG]
     inner join events on log.eventcode = events.event
ORDER BY TIME_STAMP DESC
于 2013-08-30T13:58:19.370 回答
0

使用JOIN

SELECT TOP 2000 CAST(datepart(day,TIME_STAMP) as char(2)) + '-' + 
CAST(datename(month,TIME_STAMP) as char(3)) + '-' + 
CAST(datepart(year,TIME_STAMP) as char(4))+ ' ' + CONVERT(varchar,TIME_STAMP,108)
as 'TIME STAMP', 
[TAG], 
L.[DESCRIPTION],

E.[DESCRIPTION], 

[SUBEVENTCODE]
FROM [Arc_DB].[dbo].[LOG] L
INNER JOIN [Arc_DB].[dbo].[EVENTS] E ON E.EVENT = L.EVENTCODE
ORDER BY TIME_STAMP DESC
于 2013-08-30T13:58:27.430 回答