Sql server 在表和函数中的值之间查找
我有下表: 表:Sql server 在表和函数中的值之间查找,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我有下表: 表: CREATE TABLE t1 ( cola int, colb int, colc varchar(10), cold varchar(10) ); cola colb colc cold ------------------------- 2 4 x z 6 8 ab zub 10 12 jc me 我有返回表值的函数 函数返回: f_column --
CREATE TABLE t1
(
cola int,
colb int,
colc varchar(10),
cold varchar(10)
);
cola colb colc cold
-------------------------
2 4 x z
6 8 ab zub
10 12 jc me
我有返回表值的函数
函数返回:
f_column
----
1
2
5
11
现在我想显示colc,cold from t1,其中函数结果f_列位于表t1的cola和colb之间
预期结果:
colc cold
------------
x z
jc me
您需要将函数结果与表连接起来。可能是这样的:
SELECT DISTINCT colc, cold FROM t1 INNER JOIN tf_column WHERE f_column
>= cola AND f_column <= colb
假设tf_列是一个临时表,只有一列f_列,则需要将函数结果与表连接起来。可能是这样的:
SELECT DISTINCT colc, cold FROM t1 INNER JOIN tf_column WHERE f_column
>= cola AND f_column <= colb
假设tf_column是一个临时表,只有一列f_column,考虑到您所说的函数返回一个数据集,这就假设函数是一个表值函数 有了表值函数,您可以在其上使用FROM,就像aa table一样,如果您想加入它,您必须使用APPLY。因此,这是一个非常简单的查询:
SELECT t1.colc, t1.cold
FROM dbo.YourFunction (Parameter1, Parameter2) YF
JOIN dbo.t1 ON YF.f_column BETWEEN t1.cola AND t1.colb;
上面的示例假设您的函数有两个参数。您需要更改它,使其与您的相关
编辑:作为完整的工作示例:
考虑到您所说的函数返回一个数据集,这假设该函数是一个表值函数 有了表值函数,您可以在其上使用FROM,就像aa table一样,如果您想加入它,您必须使用APPLY。因此,这是一个非常简单的查询:
SELECT t1.colc, t1.cold
FROM dbo.YourFunction (Parameter1, Parameter2) YF
JOIN dbo.t1 ON YF.f_column BETWEEN t1.cola AND t1.colb;
上面的示例假设您的函数有两个参数。您需要更改它,使其与您的相关
编辑:作为完整的工作示例:
这里有很多假设
这可能是一个表值函数不知道它需要什么参数,如果有的话
可以使用函数的联接或交叉应用
CREATE FUNCTION f_column ()
RETURNS TABLE
AS RETURN
(
SELECT Ret = 1
UNION SELECT 2
UNION SELECT 5
UNION SELECT 11
)
GO
CREATE TABLE t1
(
cola int,
colb int,
colc varchar(10),
cold varchar(10)
);
INSERT INTO dbo.t1
(cola,colb,colc,cold)
VALUES
(2, 4, 'x', 'y') , (6, 8, 'ab', 'zub') , (10, 12, 'jc', 'me')
SELECT
T.colc
,T.cold
FROM dbo.t1 T
CROSS APPLY dbo.f_column() F WHERE F.Ret BETWEEN T.cola AND T.colb
--JOIN dbo.f_column() F ON F.Ret BETWEEN T.cola AND T.colb
DROP TABLE dbo.t1
DROP FUNCTION f_column
这里有很多假设
这可能是一个表值函数不知道它需要什么参数,如果有的话
可以使用函数的联接或交叉应用
CREATE FUNCTION f_column ()
RETURNS TABLE
AS RETURN
(
SELECT Ret = 1
UNION SELECT 2
UNION SELECT 5
UNION SELECT 11
)
GO
CREATE TABLE t1
(
cola int,
colb int,
colc varchar(10),
cold varchar(10)
);
INSERT INTO dbo.t1
(cola,colb,colc,cold)
VALUES
(2, 4, 'x', 'y') , (6, 8, 'ab', 'zub') , (10, 12, 'jc', 'me')
SELECT
T.colc
,T.cold
FROM dbo.t1 T
CROSS APPLY dbo.f_column() F WHERE F.Ret BETWEEN T.cola AND T.colb
--JOIN dbo.f_column() F ON F.Ret BETWEEN T.cola AND T.colb
DROP TABLE dbo.t1
DROP FUNCTION f_column
功能是什么?它将以什么作为输入参数?它还桌子吗?更多地介绍函数什么是函数?它将以什么作为输入参数?它还桌子吗?详细介绍函数不能对函数使用联接。你必须使用APPLY,OP特别声明它是一个函数,而不是一个临时表。如果是临时表,则名称将以哈希开头。例如,tf_table.不能对函数使用JOIN。你必须使用APPLY,OP特别声明它是一个函数,而不是一个临时表。如果是临时表,则名称将以哈希开头。例如tf_table.Oh,@Larnu提供了相同的解决方案ha,几乎相同!哦,@Larnu提供了相同的解决方案哈,几乎相同!