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

Откуда:
Сообщений: 294
Здравствуйте, форумчане!

Столкнулся с проблемой создания представления с вычисляемыми столбцами.
Есть БД, в ней 3 связанных таблицы: Flood, Post, GeographicalKoordinates (фото - Схема БД)

Сперва сделал следующее представление (ну как сделал, помогли сделать):

CREATE VIEW dbo.AvgSpeedLevelSnow AS
	SELECT [Id_Flood],
		   [Id_Post],
		   [DateAndTimes],
		   [LevelSnow],
		   LAG(LevelSnow) OVER(partition by Id_Post order by DateAndTimes) AS PastLevelSnow ,
		   LAG(DateAndTimes) OVER(partition by Id_Post order by DateAndTimes) AS PastDateAndTimes,
		   (LevelSnow-LAG(LevelSnow) OVER(partition by Id_Post order by DateAndTimes))/NULLIF(DATEDIFF(hour,LAG(DateAndTimes) OVER(partition by Id_Post order by DateAndTimes),DateAndTimes),0) AS SpeedLevelSnow
		   FROM dbo.Flood;
		   GO

Которое берёт данные из таблицы Flood и рассчитывает среднею скорость между 2-мя ближайшими по времени записями таблицы Flood по каждому Id_Post.

Далее хотел сделать так, что бы вместо простого Id_Post подтягивалось имя поста из таблицы Post, и аналогично с координатами из таблицы GeographicalKoordinates:
CREATE VIEW dbo.AVGSpeedLevelWater AS
	SELECT  dbo.Flood.Id_Flood, 
	dbo.Post.NamePost,
	dbo.GeographicalKoordinates.Koordinate,
	dbo.Flood.DateAndTimes,
	dbo.Flood.LevelWater,
	LAG(LevelWater) OVER(partition by Id_Post order by DateAndTimes) AS PastLevelWater ,
	LAG(DateAndTimes) OVER(partition by Id_Post order by DateAndTimes) AS PastDateAndTimes,
	(LevelWater-LAG(LevelWater) OVER(partition by Id_Post order by DateAndTimes))/NULLIF(DATEDIFF(hour,LAG(DateAndTimes) OVER(partition by Id_Post order by DateAndTimes),DateAndTimes),0) AS SpeedLevelWater
	FROM dbo.Flood INNER JOIN
                         dbo.Post ON dbo.Flood.Id_Post = dbo.Post.Id_Post INNER JOIN
                         dbo.GeographicalKoordinates ON dbo.Post.Id_GeographicalKoordinates = dbo.GeographicalKoordinates.Id_GeographicalKoordinates;


Но мне выдало ошибки:
сообщение: 209, уровень: 16, состояние: 1, процедура: AVGSpeedLevelWater, строка: 7 [строка начала пакета: 196]
Неоднозначное имя столбца "Id_Post".
сообщение: 209, уровень: 16, состояние: 1, процедура: AVGSpeedLevelWater, строка: 8 [строка начала пакета: 196]
Неоднозначное имя столбца "Id_Post".
сообщение: 209, уровень: 16, состояние: 1, процедура: AVGSpeedLevelWater, строка: 9 [строка начала пакета: 196]
Неоднозначное имя столбца "Id_Post".
сообщение: 209, уровень: 16, состояние: 1, процедура: AVGSpeedLevelWater, строка: 9 [строка начала пакета: 196]
Неоднозначное имя столбца "Id_Post".
сообщение: 209, уровень: 16, состояние: 1, процедура: AVGSpeedLevelWater, строка: 9 [строка начала пакета: 196]
Неоднозначное имя столбца "Id_Post".


Подскажите, можно ли здесь что-то сделать, что бы подтягивались не просто ID, а данные по этим ID из связанных таблиц, не создавая дополнительного представления?

К сообщению приложен файл. Размер - 73Kb
13 июн 18, 17:56    [21489190]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления с вычисляемыми столбцами (ошибка "Неоднозначное имя столбца )  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Vlad__i__mir,

в partition by Id_Post укажите алиас нужный
13 июн 18, 17:58    [21489195]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления с вычисляемыми столбцами (ошибка "Неоднозначное имя столбца )  [new]
Владислав Колосов
Member

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

везде на столбцах пишите алиасы.
13 июн 18, 18:01    [21489204]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления с вычисляемыми столбцами (ошибка "Неоднозначное имя столбца )  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 294
TaPaK, что такое алиас?

автор
partition by Id_Post
Это где?
13 июн 18, 18:09    [21489230]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления с вычисляемыми столбцами (ошибка "Неоднозначное имя столбца )  [new]
londinium
Member

Откуда: Киев
Сообщений: 1170
Vlad__i__mir,
CREATE VIEW dbo.AVGSpeedLevelWater AS
	SELECT  FLOOD.Id_Flood, 
	POST.NamePost,
	KO.Koordinate,
	FLOOD.DateAndTimes,
	FLOOD.LevelWater,
	LAG(LevelWater) OVER(partition by FLOOD.Id_Post order by DateAndTimes) AS PastLevelWater ,
	LAG(DateAndTimes) OVER(partition by FLOOD.Id_Post order by DateAndTimes) AS PastDateAndTimes,
	(LevelWater-LAG(LevelWater) OVER(partition by FLOOD.Id_Post order by DateAndTimes))/NULLIF(DATEDIFF(hour,LAG(DateAndTimes) OVER(partition by FLOOD.Id_Post order by DateAndTimes),DateAndTimes),0) AS SpeedLevelWater
	FROM dbo.Flood FLOOD INNER JOIN
                         dbo.Post POST ON FLOOD.Id_Post = POST.Id_Post INNER JOIN
                         dbo.GeographicalKoordinates KO ON POST.Id_GeographicalKoordinates = KO.Id_GeographicalKoordinates;

FLOOD,POST,KO - алиасы таблиц
13 июн 18, 18:42    [21489276]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления с вычисляемыми столбцами (ошибка "Неоднозначное имя столбца )  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 294
londinium, у меня так и есть, только ещё "dbo." перед ним указано (пробовал его убирать результат тот же) :
автор
Далее хотел сделать так, что бы вместо простого Id_Post подтягивалось имя поста из таблицы Post, и аналогично с координатами из таблицы GeographicalKoordinates:
CREATE VIEW dbo.AVGSpeedLevelWater AS
	SELECT  dbo.Flood.Id_Flood, 
	dbo.Post.NamePost,
	dbo.GeographicalKoordinates.Koordinate,
	dbo.Flood.DateAndTimes,
	dbo.Flood.LevelWater,
	LAG(LevelWater) OVER(partition by Id_Post order by DateAndTimes) AS PastLevelWater ,
	LAG(DateAndTimes) OVER(partition by Id_Post order by DateAndTimes) AS PastDateAndTimes,
	(LevelWater-LAG(LevelWater) OVER(partition by Id_Post order by DateAndTimes))/NULLIF(DATEDIFF(hour,LAG(DateAndTimes) OVER(partition by Id_Post order by DateAndTimes),DateAndTimes),0) AS SpeedLevelWater
	FROM dbo.Flood INNER JOIN
                         dbo.Post ON dbo.Flood.Id_Post = dbo.Post.Id_Post INNER JOIN
                         dbo.GeographicalKoordinates ON dbo.Post.Id_GeographicalKoordinates = dbo.GeographicalKoordinates.Id_GeographicalKoordinates;

13 июн 18, 19:06    [21489321]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления с вычисляемыми столбцами (ошибка "Неоднозначное имя столбца )  [new]
invm
Member

Откуда: Москва
Сообщений: 9349
Vlad__i__mir
TaPaK, что такое алиас?
В гугле забанили?
CREATE VIEW dbo.AVGSpeedLevelWater AS
	SELECT  f.Id_Flood, 
	p.NamePost,
	k.Koordinate,
	f.DateAndTimes,
	f.LevelWater,
	LAG(f.LevelWater) OVER(partition by f.Id_Post order by f.DateAndTimes) AS PastLevelWater ,
	LAG(f.DateAndTimes) OVER(partition by f.Id_Post order by f.DateAndTimes) AS PastDateAndTimes,
	(f.LevelWater-LAG(f.LevelWater) OVER(partition by f.Id_Post order by f.DateAndTimes))/NULLIF(DATEDIFF(hour,LAG(f.DateAndTimes) OVER(partition by f.Id_Post order by f.DateAndTimes),f.DateAndTimes),0) AS SpeedLevelWater
	FROM dbo.Flood f INNER JOIN
                         dbo.Post p ON f.Id_Post = p.Id_Post INNER JOIN
                         dbo.GeographicalKoordinates k ON p.Id_GeographicalKoordinates = k.Id_GeographicalKoordinates;
13 июн 18, 19:51    [21489386]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления с вычисляемыми столбцами (ошибка "Неоднозначное имя столбца )  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 294
invm, на вопрос про алиас уже ответили.

Мой пример с попыткой создания представления уже содержит так называемые алиасы.
13 июн 18, 20:22    [21489425]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления с вычисляемыми столбцами (ошибка "Неоднозначное имя столбца )  [new]
invm
Member

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

Ну продолжайте считать что у вас все верно написано и ошибок нет.
Если проявите должное усердие у будете скармливать этот запрос серверу как можно чаще, возможно ему надоест и он согласится с вами, что запрос верный.
13 июн 18, 20:46    [21489486]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления с вычисляемыми столбцами (ошибка "Неоднозначное имя столбца )  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 294
londinium, прошу прощения, не внимательно изучил ваш пример - не увидел, что в функции расчёта тоже нужно указать алисы.
Спасибо! Помогло.
14 июн 18, 10:32    [21490210]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления с вычисляемыми столбцами (ошибка "Неоднозначное имя столбца )  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 294
TaPaK, спасибо! Помогло.
14 июн 18, 10:32    [21490215]     Ответить | Цитировать Сообщить модератору
 Re: Создание представления с вычисляемыми столбцами (ошибка "Неоднозначное имя столбца )  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 294
Владислав Колосов, спасибо! Помогло.
14 июн 18, 10:33    [21490217]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить