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

Откуда: Омикрон Персей 8
Сообщений: 7991
Привет всем!

Что-то запарился с синтаксисом t-SQL, на вас последняя надежда :-)

Пишу функцию, которая заполняет и возвращает таблицу (TVF).
Функция принимает кастомную табличную переменную tblTemp, в которой всего один столбец с идентификаторами пользователей id из таблицы tblUsers. Мне нужно, чтобы функция отобрала все значения из таблицы tblOperations, у которых id совпадает с tblTemp.id и построила аналогичную tblOperations таблицу, у которой вместо цифр идентификаторов в столбце ID были бы имена пользователей из таблицы tblUsers. Надеюсь, понятно объяснил, если не понятно, то см. картинку :-)

Проблема в том, что я никак не могу впихнуть в INSERT INTO эту tblTemp, чтобы сделать все по-человечески, не прибегая к курсорам.

CREATE FUNCTION fn_ExtractData(@tblTemp AS MyTable READONLY, @tms_from AS DATETIME, @tms_to AS DATETIME)
RETURNS @result TABLE
(
	[oid]		int	NOT NULL,
	[date]	datetime	NOT NULL,
	[name]	nvarchar(50) 	NOT NULL,
	[amount]	int	DEFAULT 0
)
AS BEGIN

	INSERT INTO @result ([oid], [date], [name], [amount])
	SELECT [oid], [date], (SELECT [name] FROM [tblUsers] AS u JOIN @tblTemp AS t ON t.id = u.id), [amount] FROM [tblOperations] AS o
	WHERE o.[date] > @tms_from AND o.[date] <= @tms_to
	RETURN
END
GO


Короче какая-то пурга получается...

Буду признателен за помощь

--------------------------------------------------------------
o(O_O)o

К сообщению приложен файл. Размер - 15Kb
15 мар 17, 14:22    [20297997]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Отбор значений из разных таблиц на основе табличной переменной  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Непонятно, зачем надо делать multistatement функцию,
когда речь идёт о простеньком запросике с JOINами?
Делать надо инлайн функцию, а может, и вообще функция не нужна?
CREATE FUNCTION dbo.fn_ExtractData(@tblTemp MyTable READONLY, @tms_from DATETIME, @tms_to DATETIME) RETURNS TABLE AS
RETURN
SELECT O.[oid],O. [date],U.[name],O.[amount]
FROM @tblTemp T
JOIN [tblUsers] U ON T.id=U.id
JOIN [tblOperations] O ON T.id=O.id
WHERE o.[date] >= @tms_from AND o.[date] < @tms_to;
15 мар 17, 14:31    [20298051]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Отбор значений из разных таблиц на основе табличной переменной  [new]
Кесарь
Member

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

при такой постановке задачи использование вложенного запроса некорретно. Надо соединять таблицы.


SELECT [oid], [date], u.[name], [amount]
FROM @tblTemp as t
 join [tblOperations] AS o on o.ID = t.ID
 join tblUsers AS u ON t.id = u.id
WHERE o.[date] > @tms_from
  AND o.[date] <= @tms_to
15 мар 17, 14:35    [20298079]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Отбор значений из разных таблиц на основе табличной переменной  [new]
Cerebrum
Member

Откуда: Омикрон Персей 8
Сообщений: 7991
Спасибо, парни.
Вроде получается :)
15 мар 17, 14:52    [20298179]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить