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

Откуда:
Сообщений: 7
Так выглядит основная таблица.
USE [Инкассация]
GO
/****** Объект: Table [dbo].[Наряд] Дата сценария: 12/12/2012 23:10:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Наряд](
[id_наряда] [char](10) NOT NULL,
[Дата] [datetime] NULL,
[id_дежурного] [char](10) NULL,
[id_маршрута] [char](10) NULL,
[ст_бригады] [char](10) NULL,
[инкассатор] [char](10) NULL,
[id_транспорта] [char](10) NULL,
CONSTRAINT [PK_Наряд] PRIMARY KEY CLUSTERED
(
[id_наряда] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Наряд] WITH CHECK ADD CONSTRAINT [FK_Наряд_Дежурные] FOREIGN KEY([id_дежурного])
REFERENCES [dbo].[Дежурные] ([id_дежурного])
GO
ALTER TABLE [dbo].[Наряд] CHECK CONSTRAINT [FK_Наряд_Дежурные]
GO
ALTER TABLE [dbo].[Наряд] WITH CHECK ADD CONSTRAINT [FK_Наряд_Маршруты] FOREIGN KEY([id_маршрута])
REFERENCES [dbo].[Маршруты] ([id_маршрута])
GO
ALTER TABLE [dbo].[Наряд] CHECK CONSTRAINT [FK_Наряд_Маршруты]
GO
ALTER TABLE [dbo].[Наряд] WITH CHECK ADD CONSTRAINT [FK_Наряд_Сотрудники] FOREIGN KEY([ст_бригады])
REFERENCES [dbo].[Сотрудники] ([id_сотрудника])
GO
ALTER TABLE [dbo].[Наряд] CHECK CONSTRAINT [FK_Наряд_Сотрудники]
GO
ALTER TABLE [dbo].[Наряд] WITH CHECK ADD CONSTRAINT [FK_Наряд_Сотрудники1] FOREIGN KEY([инкассатор])
REFERENCES [dbo].[Сотрудники] ([id_сотрудника])
GO
ALTER TABLE [dbo].[Наряд] CHECK CONSTRAINT [FK_Наряд_Сотрудники1]
GO
ALTER TABLE [dbo].[Наряд] WITH CHECK ADD CONSTRAINT [FK_Наряд_Список спецтранспорта] FOREIGN KEY([id_транспорта])
REFERENCES [dbo].[Список спецтранспорта] ([id_транспорта])
GO
ALTER TABLE [dbo].[Наряд] CHECK CONSTRAINT [FK_Наряд_Список спецтранспорта]

Таблица сотрудники:
USE [Инкассация]
GO
/****** Объект: Table [dbo].[Сотрудники] Дата сценария: 12/12/2012 23:13:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Сотрудники](
[id_сотрудника] [char](10) NOT NULL,
[Фамилия] [varchar](50) NULL,
[Имя] [varchar](50) NULL,
[Отчество] [varchar](50) NULL,
[Дата_рождения] [smalldatetime] NULL,
[Паспорт] [text] NULL,
[Адрес_регистрации] [text] NULL,
[Адрес_проживания] [text] NULL,
[id_должности] [char](10) NULL,
[id_подразделения] [char](10) NULL,
CONSTRAINT [PK_Сотрудники] PRIMARY KEY CLUSTERED
(
[id_сотрудника] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Сотрудники] WITH CHECK ADD CONSTRAINT [FK_Сотрудники_Должности] FOREIGN KEY([id_должности])
REFERENCES [dbo].[Должности] ([id_должности])
GO
ALTER TABLE [dbo].[Сотрудники] CHECK CONSTRAINT [FK_Сотрудники_Должности]
GO
ALTER TABLE [dbo].[Сотрудники] WITH CHECK ADD CONSTRAINT [FK_Сотрудники_Список_подразделений] FOREIGN KEY([id_подразделения])
REFERENCES [dbo].[Список_подразделений] ([id_подразделения])
GO
ALTER TABLE [dbo].[Сотрудники] CHECK CONSTRAINT [FK_Сотрудники_Список_подразделений]

Таблица дежурные:
USE [Инкассация]
GO
/****** Объект: Table [dbo].[Дежурные] Дата сценария: 12/12/2012 23:14:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Дежурные](
[id_дежурного] [char](10) NOT NULL,
[id_сотрудника] [char](10) NULL,
CONSTRAINT [PK_Дежурные] PRIMARY KEY CLUSTERED
(
[id_дежурного] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Дежурные] WITH CHECK ADD CONSTRAINT [FK_Дежурные_Сотрудники1] FOREIGN KEY([id_сотрудника])
REFERENCES [dbo].[Сотрудники] ([id_сотрудника])
GO
ALTER TABLE [dbo].[Дежурные] CHECK CONSTRAINT [FK_Дежурные_Сотрудники1]

Основной запрос к таблице Наряд:
use [Инкассация]

SELECT id_наряда AS [Номер наряда],Дата, (ct.Фамилия + SPACE(1) + SUBSTRING(ct.Имя, 1, 1) + '.'+SUBSTRING(ct.Отчество, 1, 1)+'.') AS [Cт бригады],
(i.Фамилия + SPACE(1) + SUBSTRING(i.Имя, 1, 1) + '.'+SUBSTRING(i.Отчество, 1, 1)+'.') AS Инкассатор,
[Дежурные].id_дежурного,[Маршруты].Номер_маршрута AS [Номер маршрута], [Список спецтранспорта]. Рег_номер AS [Рег номер спецтранспорта]
FROM [Инкассация].[dbo]. [Наряд]
INNER JOIN Сотрудники AS ct ON ct.id_сотрудника = [Наряд].ст_бригады
INNER JOIN Сотрудники AS i ON i.id_сотрудника = [Наряд].инкассатор
INNER JOIN [Дежурные] ON [Дежурные].id_дежурного = [Наряд].id_дежурного
INNER JOIN [Маршруты] ON [Маршруты].id_маршрута = [Наряд].id_маршрута
INNER JOIN [Список спецтранспорта] ON [Список спецтранспорта].id_транспорта = [Наряд].id_транспорта
ORDER BY Дата;

Не могу добиться чтобы в колонке отображалась фамилия вместо цифры.
ст бригады инкассатор id_дежурного
Ермаков А.А. Ларькин Е.Н. 3
Горовых Д.А. Давыдов И.В. 3
Ковалёв С.В. Сергеев П.И. 3
Ермаков А.А. Ларькин Е.Н. 3
Горовых Д.А. Давыдов И.В. 3
Ковалёв С.В. Сергеев П.И. 3
Ситказиев С.К. Фадеев Н.И. 3
Горовых Д.А. Ермаков А.А. 1
Ковалёв С.В. Сергеев П.И. 1
Это фрагмент таблицы. Помогите кто сможет. Первый раз этим занимаюсь.
12 дек 12, 23:25    [13622701]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31957
evgeniy74
Не могу добиться чтобы в колонке отображалась фамилия вместо цифры.
Нужно сделать ещё один джойн к таблице сотрудников:
SELECT 
    id_наряда AS [Номер наряда],Дата, (ct.Фамилия + SPACE(1) + SUBSTRING(ct.Имя, 1, 1) + '.'+SUBSTRING(ct.Отчество, 1, 1)+'.') AS [Cт бригады],
    (i.Фамилия + SPACE(1) + SUBSTRING(i.Имя, 1, 1) + '.'+SUBSTRING(i.Отчество, 1, 1)+'.') AS Инкассатор,
    d.Фамилия AS [Фамилия дежурного], 
    [Маршруты].Номер_маршрута AS [Номер маршрута], 
    [Список спецтранспорта]. Рег_номер AS [Рег номер спецтранспорта]
FROM [Инкассация].[dbo]. [Наряд]
INNER JOIN Сотрудники AS ct ON ct.id_сотрудника = [Наряд].ст_бригады
INNER JOIN Сотрудники AS i ON i.id_сотрудника = [Наряд].инкассатор
INNER JOIN [Дежурные] ON [Дежурные].id_дежурного = [Наряд].id_дежурного
INNER JOIN Сотрудники AS d ON d.id_сотрудника = [Дежурные].[id_сотрудника]
INNER JOIN [Маршруты] ON [Маршруты].id_маршрута = [Наряд].id_маршрута
INNER JOIN [Список спецтранспорта] ON [Список спецтранспорта].id_транспорта = [Наряд].id_транспорта
ORDER BY Дата;
13 дек 12, 00:01    [13622838]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить запрос  [new]
evgeniy74
Member

Откуда:
Сообщений: 7
Спасибо огромное всё получилось alexeyvg,
13 дек 12, 12:49    [13624924]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить запрос  [new]
evgeniy74
Member

Откуда:
Сообщений: 7
alexeyvg,
У меня возник не большой момент по той бд что вы мне помогли, ещё раз можно обратится. Писал на Форум предложения которые предлагались не сработали. А нужно нам студентам всего лишь малость

Это таблица ВСП
USE [Инкассация]
GO
/****** Объект: Table [dbo].[ВСП] Дата сценария: 01/31/2013 00:29:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[ВСП](
[id_ВСП] [nchar](10) NOT NULL,
[Номер_ВСП] [nchar](10) NULL,
[Адрес] [varchar](max) NULL,
[Режим_работы] [varchar](50) NULL,
[Время_заезда] [varchar](50) NULL,
[Телефон] [char](10) NULL,
[id_сотрудника] [char](10) NULL,
[id_маршрута] [char](10) NULL,
CONSTRAINT [PK_ВСП] PRIMARY KEY CLUSTERED
(
[id_ВСП] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[ВСП] WITH CHECK ADD CONSTRAINT [FK_ВСП_Маршруты] FOREIGN KEY([id_маршрута])
REFERENCES [dbo].[Маршруты] ([id_маршрута])
GO
ALTER TABLE [dbo].[ВСП] CHECK CONSTRAINT [FK_ВСП_Маршруты]
GO
ALTER TABLE [dbo].[ВСП] WITH CHECK ADD CONSTRAINT [FK_ВСП_Сотрудники] FOREIGN KEY([id_сотрудника])
REFERENCES [dbo].[Сотрудники] ([id_сотрудника])
GO
ALTER TABLE [dbo].[ВСП] CHECK CONSTRAINT [FK_ВСП_Сотрудники]
Так выглядит таблица сотрудники
USE [Инкассация]
GO
/****** Объект: Table [dbo].[Сотрудники] Дата сценария: 01/31/2013 00:30:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Сотрудники](
[id_сотрудника] [char](10) NOT NULL,
[Фамилия] [varchar](50) NULL,
[Имя] [varchar](50) NULL,
[Отчество] [varchar](50) NULL,
[Дата_рождения] [smalldatetime] NULL,
[Паспорт] [text] NULL,
[Адрес_регистрации] [text] NULL,
[Адрес_проживания] [text] NULL,
[id_должности] [char](10) NULL,
[id_подразделения] [char](10) NULL,
CONSTRAINT [PK_Сотрудники] PRIMARY KEY CLUSTERED
(
[id_сотрудника] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Сотрудники] WITH CHECK ADD CONSTRAINT [FK_Сотрудники_Должности] FOREIGN KEY([id_должности])
REFERENCES [dbo].[Должности] ([id_должности])
GO
ALTER TABLE [dbo].[Сотрудники] CHECK CONSTRAINT [FK_Сотрудники_Должности]
GO
ALTER TABLE [dbo].[Сотрудники] WITH CHECK ADD CONSTRAINT [FK_Сотрудники_Список_подразделений] FOREIGN KEY([id_подразделения])
REFERENCES [dbo].[Список_подразделений] ([id_подразделения])
GO
ALTER TABLE [dbo].[Сотрудники] CHECK CONSTRAINT [FK_Сотрудники_Список_подразделений]
Это маленькая таблица с должностями
USE [Инкассация]
GO
/****** Объект: Table [dbo].[Должности] Дата сценария: 01/31/2013 00:34:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Должности](
[id_должности] [char](10) NOT NULL,
[Должность] [varchar](50) NOT NULL,
[Оклад] [char](10) NULL,
CONSTRAINT [PK_Должности_1] PRIMARY KEY CLUSTERED
(
[id_должности] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
Это запрос к этим таблицам
use Инкассация
SELECT (f.Фамилия + ' ' + f.Имя+' ' + f.Отчество) AS ФИО
,id_должности ,
Номер_ВСП, Адрес,Телефон,Маршруты.Номер_маршрута
FROM ВСП

INNER JOIN
Маршруты ON Маршруты.id_маршрута = ВСП.id_маршрута
INNER JOIN
Сотрудники AS f ON f.id_сотрудника = ВСП.id_сотрудника

WHERE Маршруты.id_маршрута LIKE '%1%'
ORDER BY Номер_ВСП, Номер_маршрута
Так выглядит результат
Соколова Татьяна Сергеевна 7 3967/077 р/п Дергачи, ул.Центральная 23 2-45-78 001/1

Не могу заставить в столбце id_должности отобразить колонку с наименованием должности [Должность] [varchar](50) NOT NULL,
1 фев 13, 01:17    [13859887]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить запрос  [new]
Alexander2
Member

Откуда: Calgary
Сообщений: 1167
evgeniy74,

странный ты человек, evgeniy74!
автор
нужно нам студентам всего лишь малость
чтоб жеванную морковку в ротик плевали
Во-первых, научись оформлять сообщения в тегах, во-вторых, тебе же пояснили(за тебя сделали по сути все) как вытащить все другие поля и в том числе Должности в другом аналогичном посте, для чего учиться вообще!?

автор
в списке возвращаемых полей добавьте:
...
D.Должность
...
а внизу добавьте:
...
INNER JOIN Должности AS D ON D.id_должности = f.id_должности



alexeyvg пишет же:

автор
Нужно сделать ещё один джойн к таблице сотрудников:
SELECT 
    id_наряда AS [Номер наряда],Дата, (ct.Фамилия + SPACE(1) + SUBSTRING(ct.Имя, 1, 1) + '.'+SUBSTRING(ct.Отчество, 1, 1)+'.') AS [Cт бригады],
    (i.Фамилия + SPACE(1) + SUBSTRING(i.Имя, 1, 1) + '.'+SUBSTRING(i.Отчество, 1, 1)+'.') AS Инкассатор,
    d.Фамилия AS [Фамилия дежурного], 
    [Маршруты].Номер_маршрута AS [Номер маршрута], 
    [Список спецтранспорта]. Рег_номер AS [Рег номер спецтранспорта]
FROM [Инкассация].[dbo]. [Наряд]
INNER JOIN Сотрудники AS ct ON ct.id_сотрудника = [Наряд].ст_бригады
INNER JOIN Сотрудники AS i ON i.id_сотрудника = [Наряд].инкассатор
INNER JOIN [Дежурные] ON [Дежурные].id_дежурного = [Наряд].id_дежурного
INNER JOIN Сотрудники AS d ON d.id_сотрудника = [Дежурные].[id_сотрудника]
INNER JOIN [Маршруты] ON [Маршруты].id_маршрута = [Наряд].id_маршрута
INNER JOIN [Список спецтранспорта] ON [Список спецтранспорта].id_транспорта = [Наряд].id_транспорта
ORDER BY Дата;


что мешает напрячь мозги и догадаться, что для показа расшифрованного индекса должности надо вставить в этот скрипт необходимые строки, принцип то же - вытаскивать описание индекса из связанной по нему таблицы, и тогда получится:
SELECT 
    id_наряда AS [Номер наряда],Дата, (ct.Фамилия + SPACE(1) + SUBSTRING(ct.Имя, 1, 1) + '.'+SUBSTRING(ct.Отчество, 1, 1)+'.') AS [Cт бригады],
    (i.Фамилия + SPACE(1) + SUBSTRING(i.Имя, 1, 1) + '.'+SUBSTRING(i.Отчество, 1, 1)+'.') AS Инкассатор,
    d.Фамилия AS [Фамилия дежурного], 
    [Маршруты].Номер_маршрута AS [Номер маршрута], 
    [Список спецтранспорта]. Рег_номер AS [Рег номер спецтранспорта],
    dol.[Должность]

FROM [Инкассация].[dbo]. [Наряд]
INNER JOIN Сотрудники AS ct ON ct.id_сотрудника = [Наряд].ст_бригады
INNER JOIN Сотрудники AS i ON i.id_сотрудника = [Наряд].инкассатор
INNER JOIN [Дежурные] ON [Дежурные].id_дежурного = [Наряд].id_дежурного
INNER JOIN Сотрудники AS d ON d.id_сотрудника = [Дежурные].[id_сотрудника]
INNER JOIN [Маршруты] ON [Маршруты].id_маршрута = [Наряд].id_маршрута
INNER JOIN [Список спецтранспорта] ON [Список спецтранспорта].id_транспорта = [Наряд].id_транспорта

INNER JOIN Должности AS dol ON dol.id_должности = ct.id_должности  ---  ЭТО НАДО связать с Сотрудниками, где сидит Id_должности

ORDER BY Дата;
1 фев 13, 03:32    [13860011]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить запрос  [new]
Гость333
Member

Откуда:
Сообщений: 3683
evgeniy74,

А с чем связано решение сделать все идентификаторы с типом char(10)?
1 фев 13, 08:57    [13860171]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить