[英]Use Function with multi conditions on BigQuery
ALTER FUNCTION [dbo].[studentinformation]
(@name as varchar (50)= NULL
@surname as varchar (50) = NULL
@schoolsname as varchar = NULL)
RETURNS **NVARCHAR(255)**
AS
BEGIN
DECLARE @ret AS **NVARCHAR(255)** = NULL
--Condition 1
SELECT @ret = name + " " + surname
FROM dbo.dataset_red as rd WITH(NOLOCK)
INNER JOIN dbo.dataset_blue as bl WITH(NOLOCK) on rd.dataset = bl.dataset
WHERE red.dataset IS NOT NULL
IF @ret IS NOT NULL
BEGIN
RETURN @ret
END
--Condition 2
SELECT @ret = name + " " + surname
FROM dbo.dataset_red as rd WITH(NOLOCK)
LEFT OUTER JOIN dbo.dataset_green as gr WITH(NOLOCK) on rd.zone = gr.zone
WHERE red.dataset IS NOT NULL
IF @ret IS NOT NULL
BEGIN
RETURN @ret
END
--Condition 3
SELECT @ret = name + " " + surname
FROM dbo.dataset_red as rd WITH(NOLOCK)
LEFT OUTER JOIN dbo.dataset_yellow as yl WITH(NOLOCK) on rd.zone = yl.zone
WHERE red.dataset IS NOT NULL
RETURN @ret
END
描述我的问题:
我的问题:
要创建具有多个条件的 function,您可以使用CASE
检查多个条件。 使用此示例数据,我有 2 个表。
表格1:
表 2:
考虑下面的方法,我在其中设置了两个条件,当它返回一个值时将运行查询。 如果不匹配,它将返回 null:
注意:以下查询仅用于测试,您可以添加更多条件。 根据条件使用您自己的查询来实现您的目标。
CREATE TEMP FUNCTION getStudentInfo(firstname STRING, surname STRING, schoolname STRING)
AS (
(
case
when -- 1st condition
exists(select name from `my-project.sandbox.table1` where name = concat(firstname, ' ', surname))
then
(select name from `my-project.sandbox.table1` where name = concat(firstname, ' ', surname))
when -- 2nd condition
exists(select name from `my-project.sandbox.table2` where name = concat(firstname, ' ', surname))
then
(select name from `my-project.sandbox.table2` where name = concat(firstname, ' ', surname))
end
)
);
select getStudentInfo('chris', 'paul', 'phx') as match_1,
getStudentInfo('lebron', 'james', 'lal') as match_2,
getStudentInfo('michael', 'jordan', 'chi') as match_3,
getStudentInfo('tim', 'duncan', 'sas') as match_4;
样本 output:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.