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

Откуда:
Сообщений: 112
нет это функция,которая возвращает таблицу
25 май 13, 21:42    [14349719]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
Скажите,что я делаю не так?!

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[bestmanager_table] ()

RETURNS TABLE 
AS
RETURN 
(
	select m.name,bs.bestid 
from manager m inner join bestmanager_id bs
on m.manager=bs.bestid
)
25 май 13, 22:30    [14349823]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
fuzz
Скажите,что я делаю не так?!
Всё правильно, если нет ошибки.

Какой то у вас странный стиль вопросов, пишите, что у вас получается, копируйте ошибки, пишите конкретный вопрос, а не "что я делаю не так" :-)

Вообще если bestmanager_id - не таблица, то нужно вместо inner join использовать CROSS APPLY

Посмотрите в хелпе APPLY, там есть примеры.
25 май 13, 22:37    [14349844]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
bestmanager_id это не таблица.это скалярная функция.в ней есть значение @bestid.я не пойму как мне сделать функцию,которая возвращает таблицу в которой по заданному @bestid ищется id менеджера и выводится
25 май 13, 22:44    [14349865]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
USE [Components magazine]
GO
/****** Объект:  UserDefinedFunction [dbo].[bestmanager_table]    Дата сценария: 05/25/2013 23:10:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[bestmanager_table] (@bestid int )

RETURNS TABLE 
AS
RETURN 
(
	select m.name,m.Idmanager  from manager m 
 where Idmanager=@bestid
)
go

функция создалась


пишу запрос
 SELECT * FROM [Components magazine].[dbo].[bestmanager_table] (
   <@bestid, int,>)
нифига((
25 май 13, 23:13    [14349932]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
я кажись понял ошибку нужно вот так
 SELECT * FROM [Components magazine].[dbo].[bestmanager_table] (8)

но значение 8 я могу ввести в любой момент.а как сделать,что бы брал из таблицы.
25 май 13, 23:18    [14349945]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
fuzz
но значение 8 я могу ввести в любой момент.а как сделать,что бы брал из таблицы.
Я же выше написал, как нужно изменить запрос.
26 май 13, 00:31    [14350059]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
я не понял как(
26 май 13, 00:41    [14350076]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
fuzz
я не понял как(

alexeyvg
Вообще если bestmanager_id - не таблица, то нужно вместо inner join использовать CROSS APPLY

Посмотрите в хелпе APPLY, там есть примеры.
26 май 13, 01:59    [14350151]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
мб выборка по id неверно?

USE [Components magazine]
GO
/****** Объект: UserDefinedFunction [dbo].[bestmanager_id] Дата сценария: 05/26/2013 10:57:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[bestmanager_id] ()
RETURNS int
AS
BEGIN
DECLARE @bestid int

SELECT top (10) @bestid = s.idmanager from manager m inner join sale s on m.idmanager=s.idmanager

RETURN @bestid
END
26 май 13, 11:01    [14350333]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
В начале у меня была привязка discount к wares.я ее переделал под sale .
Теперь при выборе функции ,которая считает сумму по промежутку времени вот такая фигня
Create FUNCTION [dbo].[sum1] (@date1 smalldatetime, @date2 smalldatetime)
RETURNS TABLE
AS
return
 (
select sum(w.saleprice-(w.saleprice*(d.[percent]*0.01)))as 'сумма'
from  wares w inner join 
discount d inner join sale s on s.iddiscount=d.iddiscount inner join
saleitem si on w.idwares=si.idwares inner join
sale s on si.idsale=s.idsale
where  (s.saledate >= @date1) and (s.saledate <= @date2)
)


Сообщение 156, уровень 15, состояние 1, процедура sum1, строка 11
Неправильный синтаксис около ключевого слова "where".
26 май 13, 13:51    [14350617]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
fuzz
Теперь при выборе функции ,которая считает сумму по промежутку времени вот такая фигня
Советую вам правильно форматировать код, тогда ошибка будет видна сразу:
Create FUNCTION [dbo].[sum1] (@date1 smalldatetime, @date2 smalldatetime)
RETURNS TABLE
AS
return
 (
select sum(w.saleprice-(w.saleprice*(d.[percent]*0.01)))as 'сумма'
from  wares w 
	inner join discount d 
	inner join sale s 
		on s.iddiscount=d.iddiscount 
	inner join saleitem si 
		on w.idwares=si.idwares 
	inner join sale s 
		on si.idsale=s.idsale
where  (s.saledate >= @date1) and (s.saledate <= @date2)
)
Как видно, у вас "inner join discount d" не имеет своего условия джойна (ON)

Сервер ожидает условие ON, а вместо этого видит where. И пишет ошибку "Неправильный синтаксис около ключевого слова "where""
26 май 13, 14:26    [14350666]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
а можно сделать on от двух таблиц?
26 май 13, 14:40    [14350682]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
fuzz
а можно сделать on от двух таблиц?
Нет, для каждой нужен свой. Это же естественно, вы же должны указать связку?

Кстати, после форматирования вы должны были увидеть вторую ошибку: у вас 2 раза джойнится таблица sale s

ИМХО вы просто невнимательно расставили джойны и условия, попробуйте ещё раз, уже с нормальным фрорматированием.
26 май 13, 14:54    [14350703]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
ок а вот верхняя функция
  USE [Components magazine]
GO
/****** Объект: UserDefinedFunction [dbo].[bestmanager_id] Дата сценария: 05/26/2013 10:57:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[bestmanager_id] ()
RETURNS int
AS
BEGIN
DECLARE @bestid int

SELECT top (10) @bestid = s.idmanager from manager m inner join sale s on m.idmanager=s.idmanager 

RETURN @bestid 
END

она верная.напоминаю,она должна возващать id менеджера который продал больше всех товара
26 май 13, 14:56    [14350709]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
она верная? в этом всобственно вопрос.а то я в прошлом посте утвердительно ответил
26 май 13, 14:57    [14350711]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
fuzz
она верная? в этом всобственно вопрос.а то я в прошлом посте утвердительно ответил
Нет, она возвращает произвольного менеджера, который продал хоть один товар.
26 май 13, 15:01    [14350716]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
alexeyvg
fuzz
она верная? в этом всобственно вопрос.а то я в прошлом посте утвердительно ответил
Нет, она возвращает произвольного менеджера, который продал хоть один товар.
Вы, когда пишете функцию, сначала отлаживайте запрос, который хотите в ней использовать (впрочем, вам это уже советовали).
26 май 13, 15:02    [14350718]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
почему она тогда возвращает правильное значение и всегда одно и то же.
26 май 13, 15:05    [14350726]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
так по поводу id разобрался уже.
26 май 13, 15:08    [14350729]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
а вот с функцией sum нет решения...
26 май 13, 15:08    [14350732]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
ф-ю sum я сделал.
товарищи!помогите пожалуйста с этими bestmanager_id и bestmanager_table !
26 май 13, 15:52    [14350786]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
fuzz
ф-ю sum я сделал.
товарищи!помогите пожалуйста с этими bestmanager_id и bestmanager_table !
Я же вам написал, как из менить текст запроса.

Это если вы о том же спрашиваете, а то ваши вопросы очень лаконичны :-)
26 май 13, 16:40    [14350839]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
fuzz
Member

Откуда:
Сообщений: 112
так я вот не пойму...нужно создать функцию,которая будет искать id или делать это уже в запросе?
26 май 13, 16:41    [14350844]     Ответить | Цитировать Сообщить модератору
 Re: Правка БД в MS SQL 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
fuzz
так я вот не пойму...нужно создать функцию,которая будет искать id или делать это уже в запросе?
Вы вообще о чём спрашиваете, я уже не понимаю?

Напишите здесь:
- задачу
- как вы её решаете
- что не получается, с копированием текста ошибки, если она есть, или с примером данных и результатов, если её нет
26 май 13, 16:44    [14350846]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить