Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Задачка для форумчан (помогите с запросом)  [new]
papa86
Member

Откуда:
Сообщений: 5
Доброго времени суток.
В общем столкнулся с проблемой - надо вытащить тех подписывающих лиц, которые подписали более 3-х служебных записок, содержа-щих ключевое слово Х.
Есть база учета документов предприятия. Документы могут быть
различных типов. Каждый документ характеризуется
номером и датой, необходимо хранить информацию о лицах, подписавших этот документ. Лиц,
подписавших документ, может быть несколько. Каждый подписывающий
характеризуется фамилией, именем, отчеством и должностью.
Для каждого документа необходимо хранить ключевые слова. Ключевых слов
может быть несколько для одного документа.

Схема базы ниже. Нутром чувствую, что вложенный запрос а как на скуеле сформулировать не могу

К сообщению приложен файл. Размер - 0Kb
3 янв 10, 03:02    [8144408]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для форумчан (помогите с запросом)  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
papa86,

схема не верна. Если "Ключевых слов может быть несколько для одного документа", то связь между ключевым словом и документом должна быть не один-ко-многим, а через промежуточный справочник многие-ко-многим.
3 янв 10, 06:14    [8144427]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для форумчан (помогите с запросом)  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Roman S. Golubin
связь между ключевым словом и документом должна быть не один-ко-многим, а через промежуточный справочник многие-ко-многим.

Такая же, как между документом и тем, кто подписал документ (по твоей схеме - нужна еще одна таблица - как таблица "Подпись").
3 янв 10, 06:17    [8144428]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для форумчан (помогите с запросом)  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Еще для полноты картины не хватает результата выполнения запроса
SELECT @@VERSION
3 янв 10, 06:21    [8144429]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для форумчан (помогите с запросом)  [new]
papa86
Member

Откуда:
Сообщений: 5
Roman S. Golubin
Еще для полноты картины не хватает результата выполнения запроса
SELECT @@VERSION


Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)   Oct 14 2005 00:33:37   Copyright (c) 1988-2005 Microsoft Corporation  Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3) 

Спасибо,схему дополнил промежуточной таблицей

Осознал как написать запрос на подсчет к-ва служебных записок, содержащих ключевое слово Х.
типа
SELECT     dbo.Podpis.ID_PODPISAL, COUNT(dbo.[Document].ID_PODPIS) AS Podpisal_documentov, dbo.Podpisal.familij
FROM         /*связи*/
WHERE dbo.Type_document.naimenovanie = 'Служебная записка' AND dbo.klushslovo.slovo = 'x'
GROUP BY dbo.Podpis.ID_PODPISAL, dbo.Podpisal.familij
3 янв 10, 12:00    [8144605]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для форумчан (помогите с запросом)  [new]
papa86
Member

Откуда:
Сообщений: 5
papa86
Доброго времени суток.
Нутром чувствую, что вложенный запрос а как на скуеле сформулировать не могу


Спасибо Роману, натолкнул на мысль сделал сам.
Сделал вьюшку включив в нее предыдущий запрос (выборка типа док-та и ключ. слова), а потом из нее отфильтровал по количеству документов больше 3 в другой вьюшке.
Как объединить вместе может кто подскажет?
3 янв 10, 14:10    [8144762]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для форумчан (помогите с запросом)  [new]
papa86
Member

Откуда:
Сообщений: 5
papa86
[quot papa86]
Нутром чувствую, что вложенный запрос а как на скуеле сформулировать не могу


Осилил ничего сложного, задействовал моск (библиотека мсдн рулит)

SELECT     Podpisal_documentov, familij, dolgnost
FROM         (SELECT     COUNT(dbo.[Document].ID_DOCUMENT) AS Podpisal_documentov, dbo.Podpisal.familij, dbo.Dolgnost.dolgnost
                       FROM          dbo.[Document] INNER JOIN
                                              dbo.Klushevie_slova ON dbo.[Document].ID_DOCUMENT = dbo.Klushevie_slova.ID_DOCUMENT INNER JOIN
                                              dbo.Klushslovo ON dbo.Klushevie_slova.ID_KLUSHSLOVO = dbo.Klushslovo.ID_KLUSHSLOVO INNER JOIN
                                              dbo.Podpis ON dbo.[Document].ID_DOCUMENT = dbo.Podpis.ID_DOCUMENT INNER JOIN
                                              dbo.Podpisal ON dbo.Podpis.ID_PODPISAL = dbo.Podpisal.ID_PODPISAL INNER JOIN
                                              dbo.Type_document ON dbo.[Document].ID_TYPE = dbo.Type_document.ID_TYPE INNER JOIN
                                              dbo.Dolgnost ON dbo.Podpisal.ID_DOLGNOST = dbo.Dolgnost.ID_DOLGNOST
                       WHERE      (dbo.Type_document.naimenovanie = 'Служебная записка') AND (dbo.Klushslovo.slovo = 'Сумма')
                       GROUP BY dbo.Podpis.ID_PODPISAL, dbo.Podpisal.familij, dbo.Dolgnost.dolgnost) AS derivedtbl_1
WHERE     (Podpisal_documentov > 3)
GROUP BY familij, Podpisal_documentov, dolgnost
3 янв 10, 14:30    [8144780]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для форумчан (помогите с запросом)  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
papa86
Осилил ничего сложного, задействовал моск (библиотека мсдн рулит)
Рулит также и прочая документация по SQL. Почитайте про HAVING.
3 янв 10, 18:58    [8145116]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для форумчан (помогите с запросом)  [new]
papa86
Member

Откуда:
Сообщений: 5
Senya_L
Рулит также и прочая документация по SQL. Почитайте про HAVING.

Спасибо за совет, изучу
4 янв 10, 12:01    [8146015]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить