Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
Ms2012
Есть БД с таблицами

1. Departament (id,Nazvanie,Adress) - таблица названий департаментов и их адресов (город, улица,дом)
2. Uravlenie (id,idDepartament,Nazvanie,Adress) - таблица названий управлений, входят или нет в департамент, и их адресов (город, улица,дом)
3. Otdel (id,idDepartament,idUpravlenie,Nazvanie,Adress) - аналогично как выше
4. User (id,idDepartament,idUpravlenie,idOtdel,FIO,Kabinet,CaseAdress) - таблица сотрудников, входят или нет в деп, упр, отдел,ФИО,кабинет

где
id<и..> автоинкрементные целые идентификаторы
Nazvonie,Adress,Fio,Kabinet - символьные поля
CaseAdress - целое от 1 до 3, обозначает по какому адресу (dep(1),upr(2),otd(3)) находится сотрудник

вопрос - как построить запрос, который бы вывел ФИО всех сотрудников, адреса и кабинеты в которых они находятся?
пробовал через представления, но никак не пойму, как на основе CaseAdress выбирать подразделение и выдергивать адрес?
спасибо
16 сен 14, 09:36    [16579221]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuSoft
вопрос - как построить запрос, который бы вывел ФИО всех сотрудников, адреса и кабинеты в которых они находятся?

Соеденить таблицы по ключевым полям

GuSoft
но никак не пойму, как на основе CaseAdress выбирать подразделение и выдергивать адрес?

Что такое "подразделение" ? И причем тут CaseAdress, если для связи с другими таблицами нужны совсем другие поля ?
16 сен 14, 09:40    [16579235]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
Glory,
На сколько я понял, ему надо один адрес показать, а не все.

GuSoft,
Как Glory уже написал, джойните все это хозяйство и с помощью выражения CASE по CaseAdress выбираете нужный адрес.
16 сен 14, 09:51    [16579281]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
= Соеденить таблицы по ключевым полям

есть уже.
например id таблици Departaments соединяется idDepartaments таблиц ниже и тп с одинаковыми именами

= Что такое "подразделение" ? И причем тут CaseAdress,
подразделение это департ., управление или отдел.
управление может входить или нет в департамент. отдел может входить или нет в департамент, а также в управление.
пользователь может входить или нет в любое подразделение.

caseadress определяет, в каком из подразделений = деп, упр, отд сейчас пользьзватель находится
если 1, значит находится по адресу департамента, ..., 3 - по адресу отдела

= надо один адрес показать, а не все.
да

= case
что то такое подозревал. все равно не очень пока понятно. а результат в какое поле будет выводится?
можно поподробнее или пример?
16 сен 14, 11:38    [16579872]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuSoft
= Соеденить таблицы по ключевым полям

есть уже.
например id таблици Departaments соединяется idDepartaments таблиц ниже и тп с одинаковыми именами

Есть где ? В тексте вашего запроса ? Покажите

GuSoft
можно поподробнее или пример?

Вы умеете писать запросы с несколькими таблицами ? Знаете, что такое JOIN ?
16 сен 14, 11:40    [16579882]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
в дельфе например ясно, в таблице, подключенной через адо создал вычисляемое поле и в обработке как раз case использовал, чтобы его наполнять в зависимости от значения CaseAdress, а как это в sql запросе будет выглядеть?
16 сен 14, 11:47    [16579927]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
= Есть где ? В тексте вашего запроса ? Покажите
нет. в каждой таблице определен ключ = id
связи ключей определены в диаграмме БД.

= Вы умеете писать запросы с несколькими таблицами ? Знаете, что такое JOIN ?
нет к сожалению
16 сен 14, 11:48    [16579937]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
++
= Вы умеете писать запросы с несколькими таблицами ?
пока обходился представлениями БД. помечаешь там что надо и получаешь готовый запрос
16 сен 14, 11:51    [16579949]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuSoft
= Вы умеете писать запросы с несколькими таблицами ? Знаете, что такое JOIN ?
нет к сожалению

Значит пришла пора узнать, изучить и применить.
http://technet.microsoft.com/ru-ru/library/ms191517(v=sql.105).aspx
http://technet.microsoft.com/ru-ru/library/ms191472(v=sql.105).aspx

Сообщение было отредактировано: 16 сен 14, 11:57
16 сен 14, 11:56    [16579996]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
спасибо, почитаю.

а штука с case не сработает?
16 сен 14, 12:04    [16580063]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuSoft
а штука с case не сработает?

В case сначала нужно передать данные.
А вы их еще не выбрали.
16 сен 14, 12:06    [16580078]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
в представлении создан запрос с выбором
16 сен 14, 12:25    [16580262]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuSoft
в представлении создан запрос с выбором

В каком еще представлении ?
16 сен 14, 12:28    [16580279]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
2012 сервер стандарт.
в его состав входит MsSql Server Management Studio.
Там открываем БД.
Там есть таблицы, Диаграммы (тут связи таблиц по ключам), хранимые процедуры,...., Представления.
Чтото типа визуального построения запросов.
добавляем нужные таблицы, в них нужные поля. сохраняем. при этом формируется sql запрос (кстати как рас с join тами)
потом к представлениям можно обращаться как к таблицам.
16 сен 14, 13:33    [16580741]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuSoft
Чтото типа визуального построения запросов.
добавляем нужные таблицы, в них нужные поля. сохраняем. при этом формируется sql запрос (кстати как рас с join тами)
потом к представлениям можно обращаться как к таблицам.

Я вас больше скажу. Прямо в этом "чтото типа визуального построения запросов" можно написать вместо полей нужные выражения.
16 сен 14, 13:36    [16580763]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
это понятно.
1. в какое поле поместить результат выбора адреса?
создать дополнительное пустое?
2. прочитал тут еще про вычисляемые поля. можно ли создав такое поле в таблице users поместить туда выбор адреса через хранимую процедуру или еще как?
16 сен 14, 13:55    [16580878]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuSoft
1. в какое поле поместить результат выбора адреса?
создать дополнительное пустое?

Да

GuSoft
2. прочитал тут еще про вычисляемые поля. можно ли создав такое поле в таблице users поместить туда выбор адреса через хранимую процедуру или еще как?

Можно. Но вам это не надо.
16 сен 14, 13:58    [16580896]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
= да

но тогда получится, что таблица сильно выростет?
16 сен 14, 14:05    [16580946]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuSoft
= да

но тогда получится, что таблица сильно выростет?

Прежде всего получится фигня.
А потом уже вырастет таблица.
16 сен 14, 14:07    [16580958]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
вот сейчас создан запрос

SELECT dbo._Users.id, dbo._Users.CaseAdress, dbo._Departments.Street, dbo._Managements.Street AS Expr2, dbo._Sections.Street AS Expr3, dbo._Users.Adr
FROM dbo._Users INNER JOIN
dbo._Departments ON dbo._Users.idDepartments = dbo._Departments.id INNER JOIN
dbo._Managements ON dbo._Users.idManagements = dbo._Managements.id INNER JOIN
dbo._Sections ON dbo._Users.idSection = dbo._Sections.id

где
Departments, Managements, Sections - табл. деп., упр., отделы
Street - адрес подразделения
Adr - новое пустое символьное поле

как теперь на основе dbo._Users.CaseAdress
в Adr запихать значение dbo.X.Street? где X должен быть одной из 3х таблиц подразделений?
16 сен 14, 14:14    [16581009]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuSoft
в Adr запихать значение

Вы какое действие называете "запихать" ?
Вывести в результатах или занести в поле таблицы ?
16 сен 14, 14:16    [16581022]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
вывести. за занесены они при этом не будут? у поля никаких пометок что оно временое какоенибудь нет вроде
16 сен 14, 14:18    [16581045]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuSoft
вывести.

http://msdn.microsoft.com/ru-ru/library/ms181765.aspx

GuSoft
за занесены они при этом не будут?

Команда select не может никуда заносить данные. Изначально.
16 сен 14, 14:20    [16581053]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
GuSoft
Member

Откуда:
Сообщений: 34
угу, ясно.
ссылку ранее видел вашу.

эксперементирую пока без толку:

SELECT dbo._Users.id, dbo._Users.idUAdress, dbo._Departments.Street, dbo._Managements.Street AS Expr2, dbo._Sections.Street AS Expr3,
dbo._Users.Adr=
case dbo._Users.idUAdress
when 1 then dbo._Departments.Street
when 2 then Expr2
when 3 then Expr3
FROM dbo._Users INNER JOIN
dbo._Departments ON dbo._Users.idDepartments = dbo._Departments.id INNER JOIN
dbo._Managements ON dbo._Users.idManagements = dbo._Managements.id INNER JOIN
dbo._Sections ON dbo._Users.idSection = dbo._Sections.id
16 сен 14, 14:25    [16581087]     Ответить | Цитировать Сообщить модератору
 Re: Построить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuSoft
угу, ясно.
ссылку ранее видел вашу.

Вообще-то это уже другая ссылка
16 сен 14, 14:26    [16581092]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить