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
...

そして、基本的にEVENTCODEが何であるかを説明する別の表[EVENTS]:

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

ストアド プロシージャで 1 番目のテーブルの 2000 エントリ (行) を取得し、EVENTCODE を数値として表示する代わりに、2 番目のテーブルに含まれる説明を結果に表示したいと考えています。例えば:

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 

よろしくお願いします。これが基本的すぎる場合は申し訳ありませんが、このWebサイトや他のWebサイトを閲覧している間、これに対する解決策を見つけることができませんでした.

乾杯。

TM

4

3 に答える 3

0

あなたjoinは2つのテーブルに行きたいです。すなわち:

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 に答える
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 に答える