Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2012, 00:26   #11
ektomorf
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 10
По умолчанию

У меня назрел ещё один вопрос. В общем мне сказали что представление работает не совсем корректно. И пояснили что если бы мы изменяли скажем состояние ошибки, то он бы выводил все изменения которые произошли с ошибкой, а представление должно показывать только последнее изменение. тоесть если бы мы изменили ошыку 5 раз то он в количестве ошибок будет выводит 5 ошибок а не одну)
в общем как исправить запрос чтоб считал только последнее изменение ошибки
ektomorf вне форума Ответить с цитированием
Старый 20.01.2012, 01:05   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не очень понятно каким образом эта структура приспособлена для хранения истории измения ошибки. Приведите пример данных из базы данных для каждой таблицы,
что бы при этом наглядно было видно, как история хранится по одной и той же ошибке. И уточните какое поле идентифицирует одну ошибку в ее истории
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.01.2012, 01:22   #13
ektomorf
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 10
По умолчанию

Аватар, понимаю что звучит глупо, но я уже сам не понимаю чего от меня хочет мой преподаватель. В общем он сказал мне то что я говорил выше и привел примерный код реализации.
сказал что мне надо добавить в запрос представления примерно вот такой код
Код:
(select номер, max(Дата_изменения)
group by номер) as g
join Состояние s
on g.номер = s.номер
and g.data = s.data
ektomorf вне форума Ответить с цитированием
Старый 20.01.2012, 01:48   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну допустим Номер_ошибки идентифицирует ошибку, можно заменить первый JOIN на вложенный запрос с последними записями в истории ошибок
Код:
SELECT V.Id_области,V.Название_области,
    SUM(CASE WHEN P.Id_ошибки IS NULL THEN 0 ELSE 1 END) AS CountErr,
    SUM(CASE WHEN S.Активность='T' THEN 1 ELSE 0 END) AS CountErrAkt
  FROM Область_возникновения V
    LEFT JOIN (
      SELECT P1.Id_ошибки,P1.Id_области,P1.Id_состояния
        FROM Описание_ошибки P1,
          (SELECT Номер_ошибки,MAX(Дата_изменения) AS MaxData
             FROM Описание_ошибки
             GROUP BY Номер_ошибки) P2
           WHERE P1.Номер_ошибки=P2.Номер_ошибки AND
                 P1.Дата_изменения=P2.MaxData) P ON P.Id_области=V.Id_области
    LEFT JOIN Состояние_ошибки S ON S.Id_состояния=P.Id_состояния
  GROUP BY V.Id_области,V.Название_области
ADD

В теме http://programmersforum.ru/showthread.php?t=184225 похоже точно такая же структура данных. К чему бы это
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.01.2012 в 02:01.
Аватар вне форума Ответить с цитированием
Старый 20.01.2012, 02:29   #15
ektomorf
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 10
По умолчанию

Цитата:
ADD

В теме http://programmersforum.ru/showthread.php?t=184225 похоже точно такая же структура данных. К чему бы это
значит у какого то ещё студента точно такой же вариант задания. но похоже другое представление и процедуры.
ektomorf вне форума Ответить с цитированием
Старый 20.01.2012, 02:55   #16
ektomorf
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 10
По умолчанию

Извиниюсь на очередную наглость, но не могли бы вы ответить ещё на один вопрос.
В процедуре [изменить ответственного разработчика] преподаватель сказал поменять вводимое значение. вместо ID_ошибки должно быть Номер_ошибки

так же сказал использовать не update а insert into. Типо как для пользователя будет видно что мы изменили, но на самомо деле добавили.(вот эту часть его задания вообще не понял, безсмыслица какая то)

так же сказал использовать этот же код
Код:
(select номер, max(Дата_изменения)
group by номер) as g
join Состояние s
on g.номер = s.номер
and g.data = s.data
Очень надеюсь что может быть вы поймёте что он имел ввиду, и если поймёте не могли бы объяснить)
ektomorf вне форума Ответить с цитированием
Старый 20.01.2012, 11:21   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
CREATE PROCEDURE [dbo].[Изменить ответственного разработчика] @Номер_ошибки int,@ФИО varchar(50) AS
BEGIN
  DECLARE @Важность int,
          @Комментарий varchar,
          @ID_создателя_рапорта uniqueidentifier,
          @ID_области uniqueidentifier,
          @ID_состояния uniqueidentifier

  SELECT @Важность=P1.Важность,
         @Комментарий=P1.Комментарий,
         @ID_создателя_рапорта=P1.ID_создателя_рапорта,
         @ID_области=P1.ID_области,
         @ID_состояния=P1.ID_состояния
    FROM Описание_ошибки P1,
      (SELECT MAX(Дата_изменения) AS MaxData
         FROM Описание_ошибки
         WHERE Номер_ошибки=@Номер_ошибки) P2
    WHERE P1.Номер_ошибки=@Номер_ошибки AND P1.Дата_изменения=P2.MaxData

  INSERT INTO Описание_ошибки
    SELECT TOP 1 @Номер_ошибки,@Важность,@Комментарий,GETDATE ( ),@ID_создателя_рапорта,
        ID_сотрудника,@ID_области,@ID_состояния
      FROM Сотрудник
      WHERE ФИО=@ФИО
END
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.01.2012, 11:57   #18
ektomorf
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 10
По умолчанию

при выполнении выдаёт ошибку
Сообщение 213, уровень 16, состояние 1, процедура 12, строка 23
Ошибка вставки: имя столбца или число предоставленных значений не соответствует определению таблицы.
указывает на строчку INSERT INTO Описание_ошибки
в чём может быть дело?
ektomorf вне форума Ответить с цитированием
Старый 20.01.2012, 12:19   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ID_ошибки я не вставлял, решил что оно автоинкриментное. Так что разбирайтесь с преподом где для него значение брать. Возможно в вашей версии MS SQL какие-то нюансы есть, о которых я не в курсе
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.01.2012, 12:33   #20
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Глянул в гугл - функция NEWID для нового значения поля ID_ошибки. Добавте NEWID (): ... TOP 1 NEWID (),@Номер_ошибки,...
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на выборку и отчет на этот запрос Camelot_2012 Microsoft Office Access 2 21.12.2011 16:48
запрос к БД lebrosha SQL, базы данных 1 18.06.2010 13:41
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50