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

Откуда:
Сообщений: 13
Маленькая проблема. Возможно ли использование IN в функциях. Есть ли да то как?
27 сен 11, 16:56    [11343475]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрование функцией IN  [new]
Glory
Member

Откуда:
Сообщений: 104751
Можно
Написать ее туда руками
27 сен 11, 16:57    [11343485]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрование функцией IN  [new]
Vugar G
Member

Откуда:
Сообщений: 13
Вот сама функция
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER FUNCTION [dbo].[nal_fun](@Sezon nvarchar(50))
RETURNS TABLE
AS
RETURN
(SELECT DISTINCT COUNT(Наличие.Штрих_код) AS Tovar_nal, Наличие.Производитель AS Proiz_nal, Наличие.Сезон AS Sezon_nal,
Наличие.Коллекция AS Kollek_nal, Наличие.Линия AS Line_nal, Наличие.Наименование AS Naim_nal, Наличие.Модель AS Model_nal,
Наличие.Артикль AS Article_nal, Наличие.Цвет AS Chvet_nal, SUM(Наличие.Цена) AS Chena_nal, Склад.Наименование AS Sklad_nal
FROM Наличие INNER JOIN
Склад ON Наличие.Склад_ID = Склад.ID
GROUP BY Наличие.Производитель, Наличие.Сезон, Наличие.Коллекция, Наличие.Линия, Склад.Наименование, Наличие.Наименование,
Наличие.Модель, Наличие.Артикль, Наличие.Цвет
HAVING (Наличие.Сезон) = @Sezon)


Мне нужно что когда я вызываю в запросе ету фунция он просто делал монотонный выбор , а мулти @Sezon

SELECT Tovar_nal AS Expr1, Proiz_nal AS Expr2, Sezon_nal AS Expr4, Kollek_nal AS Expr3, Line_nal AS Expr5, Naim_nal AS Expr6, Model_nal AS Expr7,
Article_nal AS Expr8, Chvet_nal AS Expr9, Chena_nal AS Expr10, Sklad_nal AS Expr11
FROM dbo.nal_fun(@Sezon) AS nal_fun_1


Использоват функиции IN то есть выборок по не скольким параметрам dbo.nal_fun(@Sezon)
27 сен 11, 17:13    [11343629]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрование функцией IN  [new]
Vugar G
Member

Откуда:
Сообщений: 13
Vugar G
Вот сама функция
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER FUNCTION [dbo].[nal_fun](@Sezon nvarchar(50))
RETURNS TABLE
AS
RETURN
(SELECT DISTINCT COUNT(Наличие.Штрих_код) AS Tovar_nal, Наличие.Производитель AS Proiz_nal, Наличие.Сезон AS Sezon_nal,
Наличие.Коллекция AS Kollek_nal, Наличие.Линия AS Line_nal, Наличие.Наименование AS Naim_nal, Наличие.Модель AS Model_nal,
Наличие.Артикль AS Article_nal, Наличие.Цвет AS Chvet_nal, SUM(Наличие.Цена) AS Chena_nal, Склад.Наименование AS Sklad_nal
FROM Наличие INNER JOIN
Склад ON Наличие.Склад_ID = Склад.ID
GROUP BY Наличие.Производитель, Наличие.Сезон, Наличие.Коллекция, Наличие.Линия, Склад.Наименование, Наличие.Наименование,
Наличие.Модель, Наличие.Артикль, Наличие.Цвет
HAVING (Наличие.Сезон) = @Sezon)




Мне нужно что когда я вызываю в запросе ету фунция он просто делал монотонный выбор , а мулти @Sezon

SELECT Tovar_nal AS Expr1, Proiz_nal AS Expr2, Sezon_nal AS Expr4, Kollek_nal AS Expr3, Line_nal AS Expr5, Naim_nal AS Expr6, Model_nal AS Expr7,
Article_nal AS Expr8, Chvet_nal AS Expr9, Chena_nal AS Expr10, Sklad_nal AS Expr11
FROM dbo.nal_fun(@Sezon) AS nal_fun_1


Использоват функиции IN то есть выборок по не скольким параметрам dbo.nal_fun(@Sezon)





Возможно ли использование выборкой IN
ALTER FUNCTION [dbo].[nal_fun](@Sezon nvarchar(50))
27 сен 11, 17:16    [11343652]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрование функцией IN  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Vugar G, нифига не понятно... Если вы про динамику, то она в функциях недопустима.
27 сен 11, 17:20    [11343688]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрование функцией IN  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Vugar G
Возможно ли использование выборкой IN
ALTER FUNCTION [dbo].[nal_fun](@Sezon nvarchar(50))
Какая странная у Вас выборка!
27 сен 11, 17:22    [11343712]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрование функцией IN  [new]
Vugar G
Member

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

Такое возможно или нет? IN использовнаие вот здесь

SELECT Tovar_nal AS Expr1, Proiz_nal AS Expr2, Sezon_nal AS Expr4, Kollek_nal AS Expr3, Line_nal AS Expr5, Naim_nal AS Expr6, Model_nal AS Expr7,
Article_nal AS Expr8, Chvet_nal AS Expr9, Chena_nal AS Expr10, Sklad_nal AS Expr11
FROM dbo.nal_fun(@Sezon) AS nal_fun_1
27 сен 11, 17:23    [11343729]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрование функцией IN  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Vugar G, CROSS APPLY ?
27 сен 11, 17:31    [11343804]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрование функцией IN  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
Vugar G,

SELECT Tovar_nal AS Expr1, Proiz_nal AS Expr2, Sezon_nal AS Expr4, Kollek_nal AS Expr3, Line_nal AS Expr5, Naim_nal AS Expr6, Model_nal AS Expr7,
Article_nal AS Expr8, Chvet_nal AS Expr9, Chena_nal AS Expr10, Sklad_nal AS Expr11
FROM [Наличие] n 
   CROSS APPLY dbo.nal_fun(n.[Сезон]) AS nal_fun_1
WHERE n.[Сезон] IN ('value1', 'value2',...)
Угадал?
27 сен 11, 17:35    [11343831]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрование функцией IN  [new]
Vugar G
Member

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

Да угалали, но как осуществит ???
27 сен 11, 19:43    [11344582]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрование функцией IN  [new]
mike909
Member

Откуда:
Сообщений: 662
Vugar G
baracs,

Да угалали, но как осуществит ???

+ например

DECLARE @t TABLE([Сезон] sysname)
INSERT INTO @t 
SELECT 'var2' UNION ALL
SELECT 'QQQ'  UNION ALL
SELECT 'WWW'  

declare @ParamList NVARCHAR(max), @Splitter NVARCHAR(100)

select @ParamList = 'var1,var2,var3,var4', @Splitter = ','  

;WITH Ln( id, Value, idx )
as (
  SELECT 1 as id, LEFT(@ParamList, i.idx -1 ) as Value, i.idx + Len(@Splitter) as idx
  FROM (
    SELECT case charindex( @Splitter, @ParamList ) 
            when 0 then Len(@ParamList) + 1
            else charindex( @Splitter, @ParamList ) 
          end as idx
  ) as i
  WHERE ISNULL(i.idx,0) > 0

  UNION ALL
  
  SELECT Ln.id + 1, SUBSTRING( @ParamList, Ln.idx, i.idx - Ln.idx ), i.idx + Len(@Splitter)
  FROM Ln
  CROSS APPLY(
    SELECT case charindex( @Splitter, @ParamList, Ln.idx )
            when 0 then Len(@ParamList) + 1
            else charindex( @Splitter, @ParamList, Ln.idx )
          end as idx
  ) as i
  WHERE Ln.idx <= Len( @ParamList )
)
SELECT *
FROM @t AS n
WHERE n.[Сезон] IN ( SELECT [Value] FROM Ln )
27 сен 11, 19:56    [11344639]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить