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

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

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

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

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

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

Здравствуйте, если кто отзовётся на крик о помощи буду очень признателен) сразу говорю работаю в Среде SQL Server Management Studio Express SQL 2005
В общем ситуация такая: нужно создать представление "статистика по областям". должна включать в себя ID_области, название области, Колличество всех ошибок(для каждой области) и Колличество активных ошибок тоже в каждой области)
Проблема в том что если создавать на вывод количества ошибок 2 count то при условии что активность = 'True', он выводит только те области где есть активные ошибки. а те где нет активных не выводит. ъ
через сум не то не то не могу сделать так как, типы данных uniqueidentifier и bit.
В общем скажите как можно добится того чтоб он вывел примерно такую картину

lll ID_области lll Название области lll Кол-во всех ошибок lll Колличество активных ошибок lll


понимаю что написано очень непонятным языком)) но если кто нить поймёт и поможет буду очень благодарен))
ektomorf вне форума Ответить с цитированием
Старый 17.01.2012, 12:17   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В понятие "понятный язык" входит описание структуры таблиц, из которых нужно View получить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.01.2012, 19:16   #3
ektomorf
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 10
По умолчанию

вот ) что то вроде этого) все ID шники имеют тип uniqueidentifire, а сам атрибут активность тип bit
Изображения
Тип файла: jpg таблицы.JPG (43.9 Кб, 192 просмотров)

Последний раз редактировалось ektomorf; 17.01.2012 в 19:45.
ektomorf вне форума Ответить с цитированием
Старый 17.01.2012, 20:13   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
SELECT V.Id_области,V.Название_области,COUNT(*) AS CountErr,
    SUM(CASE WHEN S.Активность='T' THEN 1 ELSE 0 END) AS CountErrAkt
  FROM Описание_ошибки P,Область_возникновения V,Состояние_ошибки S
  WHERE V.Id_области=P.Id_области AND P.Id_состояния=S.Id_состояния
  GROUP BY V.Id_области,V.Название_области
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.01.2012, 21:01   #5
ektomorf
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 10
По умолчанию

Огромное спасибо за помощь и понимаю что наглею) но никтож не умрёт если задам ещё один вопрос)
возможно ли в там же создать такие процедуры:

Proc Изменить ответственного разработчика
@ID_ошибки, @ФИО

Proc создать ошибку
@Номер, ID_создателя_рапорта, ID_ответственного_разработчика,
@Коментарий, @Название_состояния, @ID_области
ektomorf вне форума Ответить с цитированием
Старый 17.01.2012, 21:25   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Почему бы и нет. Создаете хранимые процедуры, в которых обновляете или добавляете соответствующую информацию командами UPDATE или INSERT. Информация в представлении на автомате изменится после этого. Кстати в том SELECT-е я не показывапю те записи из таблицы Область_возникновения, для которых ошибок нет. Если их тоже нужно, то запрос изменить, используя эту таблицу в FROM, а две другие в LEFT JOIN. И COUNT не использовать, а тоже почти такой же SUM, но с анализом на NULL
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.01.2012, 22:04   #7
ektomorf
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 10
По умолчанию

ещё раз большое спасибо)
но вот касательно анализа на null не могли бы поподробней.
тоесть мне надо вписать примерно вот такую строчку вместо каунта?
sum(case when [Область_возникновения].[ID_области] а вот здесь что вы имели ввиду про анализа на null)
ektomorf вне форума Ответить с цитированием
Старый 17.01.2012, 22:13   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
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 Описание_ошибки P ON P.Id_области=V.Id_области
    LEFT JOIN Состояние_ошибки S ON S.Id_состояния=P.Id_состояния
  GROUP BY V.Id_области,V.Название_области
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.01.2012, 12:58   #9
ektomorf
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 10
По умолчанию

Вот ещё вопрос назрел у меня, в чём может быть ошибка не понимаю.
Ошибка при преобразовании типа данных varchar к uniqueidentifier.

GO
ALTER PROCEDURE [dbo].[Изменить ответственного разработчика]
(@ID_ошибки uniqueidentifier,
@ФИО varchar(50))
as
begin
declare
@ID_ответственного_разработчика uniqueidentifier
select
ID_ответственного_разработчика
from
[Описание_ошибки]
inner join [Сотрудник]
on [Сотрудник].[ID_сотрудника] = [Описание_ошибки].[ID_ответственного_разработчика]
where [ФИО] = @ФИО
update [Описание_ошибки]
set [ID_ответственного_разработчика] = @ID_ответственного_разработчика
end
ektomorf вне форума Ответить с цитированием
Старый 18.01.2012, 13:41   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Достаточно только этого, все остальное после заголовка чепуха
Код:
UPDATE Описание_ошибки
  SET ID_ответственного_разработчика=(SELECT TOP 1 ID_сотрудника FROM Сотрудник WHERE ФИО=@ФИО)
  WHERE ID_ошибки=@ID_ошибки
TOP 1 на тот случай, если ФИО не уникальное в таблице. И пользуйтесь # для выделения кодов. Желательно коды должны нормально выглядеть, иначе их тяжело читать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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