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

Откуда: Ukraine, Donetsk
Сообщений: 462
Я немного почитав думал что пройдет такая штука
ALTER TABLE Users ADD CountOfAlbums AS (COUNT(*) from Photos)

Но в синтаксисе ошибка. Подскажите как исправить?
23 июл 13, 16:35    [14605363]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
taaamerlan,

сделать скалярную функцию, а уж её - в определениеи вычисляемого поля.
Но надо ли?
Можно ведь индексированное VIEW сделать...
23 июл 13, 16:37    [14605373]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Некоторые, правда, любят в триггерах Photos пересчитывать постоянное поле Users.CountOfAlbums
23 июл 13, 16:39    [14605383]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
И, кстати, это поле, равное COUNT(*), имеет одно значение для всех записей Users?
23 июл 13, 16:41    [14605396]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
SilverSpyder
Member

Откуда:
Сообщений: 23
iap
И, кстати, это поле, равное COUNT(*), имеет одно значение для всех записей Users?


Вот вот.. сразу как-то неясна суть данной "доработки".
23 июл 13, 16:44    [14605418]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
taaamerlan
Member

Откуда: Ukraine, Donetsk
Сообщений: 462
iap
И, кстати, это поле, равное COUNT(*), имеет одно значение для всех записей Users?

Нет конечно... А [iap автор]сделать скалярную функцию, а уж её - в определениеи вычисляемого поля.[/quote] не вариант в таком случае?
23 июл 13, 17:17    [14605646]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
taaamerlan
iap
И, кстати, это поле, равное COUNT(*), имеет одно значение для всех записей Users?

Нет конечно... А [iap автор]сделать скалярную функцию, а уж её - в определениеи вычисляемого поля.
не вариант в таком случае?[/quote]Медленно это очень.
И вызываться будет даже при SELECTах на каждую запись.

P.S. А теги-то вот они, сверху! И цитирование в том числе.
23 июл 13, 17:21    [14605672]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
taaamerlan
Member

Откуда: Ukraine, Donetsk
Сообщений: 462
iap
taaamerlan
пропущено...

Нет конечно... А
iap
сделать скалярную функцию, а уж её - в определениеи вычисляемого поля.
не вариант в таком случае?
Медленно это очень.
И вызываться будет даже при SELECTах на каждую запись.


И что делать-то?
23 июл 13, 17:26    [14605712]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
taaamerlan
Member

Откуда: Ukraine, Donetsk
Сообщений: 462
Может тригерами? Или тоже плохой вариант?
23 июл 13, 17:27    [14605721]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
Гость333
Member

Откуда:
Сообщений: 3683
taaamerlan
И что делать-то?

Сделайте, например, представление (view), в котором будете соединять таблицы Users и Photos и вычислять заветный CountOfAlbums.

iap
P.S. А теги-то вот они, сверху! И цитирование в том числе.
И тэг iap среди них отсутствует
23 июл 13, 17:29    [14605738]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Гость333
taaamerlan
И что делать-то?

Сделайте, например, представление (view)

Собственно, это в первом же ответе посоветовали.
23 июл 13, 17:30    [14605744]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
+
Гость333
iap
P.S. А теги-то вот они, сверху! И цитирование в том числе.
И тэг iap среди них отсутствует
Дааа.. Недоработочка...
23 июл 13, 17:32    [14605765]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
taaamerlan
Member

Откуда: Ukraine, Donetsk
Сообщений: 462
Гость333
taaamerlan
И что делать-то?

Сделайте, например, представление (view), в котором будете соединять таблицы Users и Photos и вычислять заветный CountOfAlbums.


А как вычислять значение внутри представления? Я пока думаю о варианте с извлечением результата из табличной функции
23 июл 13, 20:35    [14606616]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
qwerty112
Guest
taaamerlan
А как вычислять значение внутри представления?

агреггатными функциями, например
taaamerlan
Я пока думаю о варианте с извлечением результата из табличной функции

ты б "думалку" поберёг бы,
а вместо этого - вопрос задал бы ..
Рекомендации по оформлению сообщений в форуме п.6
23 июл 13, 21:01    [14606732]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
taaamerlan
Member

Откуда: Ukraine, Donetsk
Сообщений: 462
я возможно неправильно выразил свой вопрос.. Мне нужно вывести информацию о пользователе. Почти вся нужная информация хранится в одной таблице. Я создал представление и собираюсь дергать информацию из хранимой процедуры, а процедура ее должна брать из представления. Все бы хорошо, но информации в представлении (и соответственно таблице) мне не достаточно. Мне нужно еще выводить количество записей связанных с этим пользователем в другой таблице (количество фото). Я думаю можно в хранимой процедуре просто обьеденить данные из представления и запрос на count в другой таблице, но не могу понять - как. Чисто синтаксически: как это делается?
23 июл 13, 21:12    [14606767]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
qwerty112
Guest
taaamerlan
...
Мне нужно еще выводить количество записей связанных с этим пользователем в другой таблице (количество фото). Я думаю можно в хранимой процедуре просто обьеденить данные из представления и запрос на count в другой таблице, но не могу понять - как. Чисто синтаксически: как это делается?


select <всё что нужно из представления>, count(*) as [количество фото]
from представление left join [другой таблице]
  on представление.хзкакоеполе=[другой таблице].хзкакоеполе
group by <всё что нужно из представления>
23 июл 13, 21:17    [14606791]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
taaamerlan
Member

Откуда: Ukraine, Donetsk
Сообщений: 462
qwerty112,

таблица
users
CREATE TABLE [dbo].[Users](
	[UserID] [int] IDENTITY(1,1) NOT NULL,
	[FirstName] [varchar](20) NOT NULL,
	[LastName] [varchar](20) NULL,
	[TelNumber] [varchar](30) NULL,
	[Skype] [varchar](50) NULL,
	[Email] [varchar](50) NOT NULL,
	[Vk] [varchar](50) NULL,
	[Status] [varchar](50) NULL,
	[ImgURL] [varchar](max) NULL,
	[Password] [varchar](50) NOT NULL,
 CONSTRAINT [PK_UserID] PRIMARY KEY CLUSTERED 
(
	[UserID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

таблица Albums
REATE TABLE [dbo].[Albums](
	[UserID] [int] NOT NULL,
	[UserName] [varchar](20) NOT NULL,
	[AlbumID] [int] NOT NULL,
	[AlbumName] [varchar](50) NOT NULL,
	[MainImgURl] [nchar](10) NOT NULL,
 CONSTRAINT [PK_Albums] PRIMARY KEY CLUSTERED 
(
	[AlbumID] 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].[Albums]  WITH CHECK ADD  CONSTRAINT [FK_Albums_Users] FOREIGN KEY([UserID])
REFERENCES [dbo].[Users] ([UserID])
GO

ALTER TABLE [dbo].[Albums] CHECK CONSTRAINT [FK_Albums_Users]
GO

таблица Photos
CREATE TABLE [dbo].[Photos](
	[PhotoId] [int] NOT NULL,
	[UserID] [int] NOT NULL,
	[AlbumID] [int] NOT NULL,
	[PhotoURL] [varchar](max) NOT NULL,
	[Discriptions] [varchar](max) NULL,
 CONSTRAINT [PK_Photos] PRIMARY KEY CLUSTERED 
(
	[PhotoId] 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].[Photos]  WITH CHECK ADD  CONSTRAINT [FK_Photos_Albums] FOREIGN KEY([AlbumID])
REFERENCES [dbo].[Albums] ([AlbumID])
GO

ALTER TABLE [dbo].[Photos] CHECK CONSTRAINT [FK_Photos_Albums]
GO

ALTER TABLE [dbo].[Photos]  WITH CHECK ADD  CONSTRAINT [FK_Photos_Users1] FOREIGN KEY([UserID])
REFERENCES [dbo].[Users] ([UserID])
GO

ALTER TABLE [dbo].[Photos] CHECK CONSTRAINT [FK_Photos_Users1]
GO

Представления берут все данные из таблиц. т.е. по представлению на таблицу
23 июл 13, 21:17    [14606794]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
qwerty112
Guest
fix
qwerty112
select <всё что нужно из представления>, count([другой таблице].хзкакоеполе) as [количество фото]
from представление left join [другой таблице]
  on представление.хзкакоеполе=[другой таблице].хзкакоеполе
group by <всё что нужно из представления>
23 июл 13, 21:18    [14606800]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
taaamerlan
я возможно неправильно выразил свой вопрос.. Мне нужно вывести информацию о пользователе.
Эта информация будет выводится постоянно?

Если частота обновлений фотографий и чтения количества фотографий относятся как миллиард к одному, то лучше делать в триггере.

Если информация будет выводится в редкоиспользуемой страничке "профиль пользователя", то достаточно инфу запрашивать просто запросом.
23 июл 13, 21:55    [14606905]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
taaamerlan
Member

Откуда: Ukraine, Donetsk
Сообщений: 462
alexeyvg, часто будет происходить и то и другое. Их частота примерно одинакова
24 июл 13, 00:42    [14607643]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
taaamerlan
Member

Откуда: Ukraine, Donetsk
Сообщений: 462
написал
select *, count(Photos.PhotoId ) as [количество фото]
from FullUserInfo left join Photos
  on FullUserInfo.UserID =Photos.UserID 
group by FirstName

Не понятно что нужно вводить в [количество фото]

FullUserInfo - представление
Photos - таблица с фото. Возможно, лучше заменить на представление этой таблицы
24 июл 13, 00:53    [14607681]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
Гость333
Member

Откуда:
Сообщений: 3683
taaamerlan
написал
select *, count(Photos.PhotoId ) as [количество фото]
from FullUserInfo left join Photos
  on FullUserInfo.UserID =Photos.UserID 
group by FirstName

И что, запрос работает и выдаёт какой-то результат?

taaamerlan
Не понятно что нужно вводить в [количество фото]

Ничего не нужно вводить. [Количество фото] — это алиас столбца запроса. О назначении квадратных скобок можно прочесть в документации: Идентификаторы с разделителями (компонент Database Engine)
24 июл 13, 12:12    [14609450]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
taaamerlan
Member

Откуда: Ukraine, Donetsk
Сообщений: 462
Я разобрался. Спасибо за помошь. А как сюда запихнуть еще и 3ю таблицу. Так чтобы выводить юзер инфу, количество альбомов и количество фото. Как присоединить еще таблицу альбомов?
24 июл 13, 13:21    [14610041]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
Glory
Member

Откуда:
Сообщений: 104760
taaamerlan
Как присоединить еще таблицу альбомов?

Еще раз использовать join ?
24 июл 13, 13:22    [14610049]     Ответить | Цитировать Сообщить модератору
 Re: Добавить столбец вычисляемый по количеству записей в другой таблице  [new]
taaamerlan
Member

Откуда: Ukraine, Donetsk
Сообщений: 462
В принципе можно используя таблицу с фото подсчитать альбомы
select 
		FullUserInfo.UserID, FullUserInfo.Email, FullUserInfo.FirstName,
		FullUserInfo.LastName, FullUserInfo.ImgURL, FullUserInfo.Password ,
		FullUserInfo.Skype, FullUserInfo.Status, FullUserInfo.TelNumber,
		FullUserInfo.Vk,
		COUNT(Photos.PhotoId ) as PhotosCount, 
		COUNT(Photos.AlbumID) as AlbumsCount
from FullUserInfo left join Photos
  on FullUserInfo.UserID =Photos.UserID 
group by 
		FullUserInfo.UserID, FullUserInfo.Email, FullUserInfo.FirstName,
		FullUserInfo.LastName, FullUserInfo.ImgURL, FullUserInfo.Password ,
		FullUserInfo.Skype, FullUserInfo.Status, FullUserInfo.TelNumber,
		FullUserInfo.Vk
go

Но все же интерестно: как присоединять еще таблицы?
24 июл 13, 13:23    [14610062]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить