在 table 和函数的值之间查找
Find between values from table and function
我有以下 table:
Table:
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
我有 return table 值的功能。
函数return:
f_column
----
1
2
5
11
现在我想显示 t1
中的 colc,cold
,其中函数结果 f_column
介于 cola
和 colb
之间 table t1
.
预期结果:
colc cold
------------
x z
jc me
您需要将函数结果与 table 连接起来。它可能是这样的:
SELECT DISTINCT colc, cold FROM t1 INNER JOIN tf_column WHERE f_column
>= cola AND f_column <= colb
假设 tf_column 是临时的 table,只有一列 (f_column)
考虑到您说函数 returns 是一个数据集,因此 假设 该函数是一个 table 值函数。
对于table值函数,你可以在它上面使用FROM
,就像aa table一样(如果你想对它“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;
这里有很多假设
也许是 table 值函数? - 不知道它需要的参数,如果有的话
您可以对函数使用 JOIN 或 CROSS APPLY
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
我有以下 table:
Table:
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
我有 return table 值的功能。
函数return:
f_column
----
1
2
5
11
现在我想显示 t1
中的 colc,cold
,其中函数结果 f_column
介于 cola
和 colb
之间 table t1
.
预期结果:
colc cold
------------
x z
jc me
您需要将函数结果与 table 连接起来。它可能是这样的:
SELECT DISTINCT colc, cold FROM t1 INNER JOIN tf_column WHERE f_column
>= cola AND f_column <= colb
假设 tf_column 是临时的 table,只有一列 (f_column)
考虑到您说函数 returns 是一个数据集,因此 假设 该函数是一个 table 值函数。
对于table值函数,你可以在它上面使用FROM
,就像aa table一样(如果你想对它“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;
这里有很多假设 也许是 table 值函数? - 不知道它需要的参数,如果有的话
您可以对函数使用 JOIN 或 CROSS APPLY
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