我在oracle中遇到了if then else语句,但我不确定两个select count(*)语句的目的是什么。有人可以帮助我。 我需要解决这个问题,在t-sql中重写它。 谢谢。这是代码:
BEGIN
IF (nEL_ID > 0) THEN
select upperMatched||valueMatched INTO sResult
from
(
select count(*) as upperMatched
from HSIP.FY_ORT_VALUES ov
where ov.FY = nFY and OV.EL_ID = nEL_ID
and upper(OV.VAL_DESCRIPTION) = upper(sRESPONSE_STRING)
)um,
(
select count(*) as valueMatched
from HSIP.FY_ORT_VALUES ov
where ov.fy = nfy and OV.EL_ID = nEL_ID
and OV.VAL_DESCRIPTION = sRESPONSE_STRING
)lm;
ELSE
sResult := '00';
END IF;
RETURN sResult;
SQL Server:
CREATE FUNCTION [hsip].[getMatchedFlags]
(
@nFY NUMERIC(4,0) = 0,
@sResponse_String varchar(250),
@nEL_ID NUMERIC(5,0) = 0
)
RETURNS @sResult TABLE(FY NUMERIC(4,0),
Response_string varchar(250),
el_id numeric(5,0))
AS
BEGIN
insert into @sResult
--select * from (select case
SELECT CASE
when (@nEL_ID>0) then
SELECT(CONCAT(
(select count(*) as upperMatched
from HSIP.FY_ORT_VALUES ov
where ov.FY = @nFY and OV.EL_ID = @nEL_ID
and upper(OV.VAL_DESCRIPTION) = upper(@sRESPONSE_STRING)),
(SELECT COUNT(*) AS valueMatched
FROM hsip.FY_ORT_VALUES OV
WHERE OV.FY= @nFY AND OV.el_id= @nEL_ID
AND OV.VAL_DESCRIPTION= @sResponse_String))
ELSE
SET @SRESULT= 0;
return;
答案 0 :(得分:1)
um
和lm
是标量子查询(每个返回一行只有一列;在这种情况下,返回的单个值是一个数字,某个或另一个的计数)。
SQL(或至少Oracle SQL)允许您将标量查询的结果用作表达式 - 在本例中为纯数字。 “IF”分支将结果sResult
设置为这两个数字的串联(在将它们隐式转换为字符串之后)。
这对我来说没什么意义;如果第一个计数是399而第二个计数是1,则结果将是字符串'3991'(不是数字,而是字符串)。顺便说一句,如果第一个计数是39,第二个计数是91,那么你将获得完全相同的结果。
注意 - 正如下面评论中所讨论的那样,我错过了原始问题的要点。 xQbert在对原始问题的评论中解释了计数本身的含义。