У меня есть еще одна довольно любопытная проблема.У меня есть следующая структура:
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 (иначе ... группируя ее и отображая последнюю запись для каждой группы).(/4139905/kak-poluchit-poslednyy-zapis-na-gruppu-v-sql) Спасибо @Anthony Faull, @Damien_The_Unbeliever и всем остальным, кто способствовал этому ответу.
К сожалению, новое требование было добавлено ко мне и включает поля SourceId и EventType этой таблицы.
По сути, новое требование гласит, что для определенного значения в столбце EventType ('APP_CLOSE' и 'APP_START') выберите Имя источника. Для всего остального выведите «NULL» или какое-либо другое предопределенное значение.
Я пытаюсь создать представление, которое будет соответствовать этому запросу, и попытался с помощью LEFT OUTER JOIN. Проблема в том, что некоторые записи в таблице событий имеют значения в SourceId, а я не получаю данные, доставленныеПРИСОЕДИНЯЙТЕСЬ к этим записям, если в поле 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) на данный момент.
Спасибо,
Мартин