我有下表:
表格:
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
中的t1
,其中函数结果f_column
在表cola
的{{1}}和colb
之间。
预期结果:
t1
答案 0 :(得分:2)
考虑到您说该函数返回了数据集,因此假设是一个表值函数。
使用表值功能,您可以在表上使用FROM
,就像使用表一样(如果要对表使用“ JOIN
”,则必须使用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;
以上示例假定您的函数有2个参数。您需要对其进行更改以使其与您的商品相关。
编辑:作为完整的工作示例:
USE Sandbox;
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','z'),
(6,8,'ab','zub'),
(10,12,'jc','me');
GO
CREATE FUNCTION f1() RETURNS table
AS RETURN
SELECT *
FROM (VALUES(1),(2),(5),(11)) V(f_column);
GO
SELECT t1.colc, t1.cold
FROM dbo.f1()
JOIN dbo.t1 ON f1.f_column BETWEEN t1.cola AND t1.colb;
GO
DROP TABLE t1;
DROP FUNCTION f1;
答案 1 :(得分:2)
这里有许多假设 这是一个表值函数吗? -不知道所需的参数
您可以对函数使用JOIN或交叉应用
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
答案 2 :(得分:-1)
您需要将函数结果与表连接。可能是这样的:
SELECT DISTINCT colc, cold FROM t1 INNER JOIN tf_column WHERE f_column
>= cola AND f_column <= colb
假设tf_column是一个只有一列(f_column)的临时表