我還有一個頗爲奇怪的問題。我有以下結構:只加入SQL中的特定行?
CREATE TABLE [dbo].[Event]
(
Id int IDENTITY(1,1) NOT NULL,
ApplicationId nvarchar(32) NOT NULL,
Name nvarchar(128) NOT NULL,
Description nvarchar(256) NULL,
Date nvarchar(16) NOT NULL,
Time nvarchar(16) NOT NULL,
EventType nvarchar(16) NOT NULL,
SourceId int NOT NULL,
CONSTRAINT Event_PK PRIMARY KEY CLUSTERED (Id) WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
),
CONSTRAINT Event_Source FOREIGN KEY (SourceId) REFERENCES [dbo].[Source](Id)
)
CREATE TABLE [dbo].[Source]
(
Id int IDENITY(1,1) NOT NULL,
Name nvarchar(128) NOT NULL,
Description nvarchar(256) NULL,
CONSTRAINT Source_PK PRIMARY KEY CLUSTERED (Id) WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
)
)
來自事件表的數據必須顯示在網格中。在我之前的問題中,我學會了如何恰當地查詢和顯示數據,同時只顯示每個ApplicationId的最後一條記錄(也就是將它分組並顯示每個組的最後一條記錄)。 (http://stackoverflow.com/questions/6201253/how-to-get-the-last-record-per-group-in-sql)謝謝@Anthony Faull,@Damien_The_Unbeliever以及所有其他對此答案有所貢獻的人。
不幸的是,我有一個新的要求,它涉及到這個表的SourceId和EventType字段。
基本上,新要求規定,對於EventType('APP_CLOSE'和'APP_START')列中的特定值,請抓取源的名稱。對於其他所有內容顯示「NULL」或其他預定義值。
我想創建一個視圖,將容納這個請求,並試圖使用左外部聯接。問題是Event表中的某些記錄在SourceId中有值,並且我沒有通過JOIN爲這些記錄帶來的數據,除非EventType字段爲「APP_CLOSE」或「APP_START」。
有關如何做到這一點的任何想法?
編輯 *
由於有人指出,我在解釋吸什麼問題,我決定做一個跟進:
事件:
| Id | ApplicationId | Name | Description | Date |Time | EventType | SourceId |
+----+----------------+-------+-------------+------------+---------+-----------+----------+
|1 |2202 |XYZ | Test | 05/31/2011 |10:30:55 | APP_CLOSE | 2 |
+----+----------------+-------+-------------+------------+---------+-----------+----------+
|2 |2709 |zyx | Test | 05/31/2011 |11:27:55 | APP_START | 4 |
+----+----------------+-------+-------------+------------+---------+-----------+----------+
|3 |2709 |zyx | Test | 05/31/2011 |17:09:55 | APP_PAUSE | 1 |
源表:
| Id | Name | Description |
+----+-------------------+-------------+
| 2 | Process Watcher | |
+----+-------------------+-------------+
| 4 | Interrupt Handler | |
+----+-------------------+-------------+
| 1 | User Input | |
+----+-------------------+-------------+
結果(查詢或視圖):
| Id | ApplicationId | Name | Description | Date |Time | EventType | Source Name |
+----+----------------+-------+-------------+------------+---------+-----------+----------------------+
|1 |2202 |XYZ | Test | 05/31/2011 |10:30:55 | APP_CLOSE | Process Watcher |
+----+----------------+-------+-------------+------------+---------+-----------+----------------------+
|2 |2709 |zyx | Test | 05/31/2011 |11:27:55 | APP_START | Interrupt Handler |
+----+----------------+-------+-------------+------------+---------+-----------+----------------------+
|3 |2709 |zyx | Test | 05/31/2011 |17:09:55 | APP_PAUSE | |
的想法是,即使用戶可以暫停應用程序,用戶不是一個有形的一塊軟件。因此,在報告發生的事件時,我只能報告由軟件組件引起的事件。換句話說,我現在只需要根據特定事件類型(APP_CLOSE和APP_START)引入源名稱。
感謝,
馬丁
您可以添加迄今爲止的查詢以及您所得到的結果以及您想要的結果嗎? – cordsen 2011-06-01 15:33:22
對不起,「除非EventType字段爲'APP_CLOSE'或'APP_START',否則我不會收到JOIN提供的數據。」 – Pankaj 2011-06-01 15:34:58