oracle:从2个选择语句中选择,表示

时间:2016-09-21 17:42:11

标签: sql sql-server oracle

我在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;

1 个答案:

答案 0 :(得分:1)

umlm是标量子查询(每个返回一行只有一列;在这种情况下,返回的单个值是一个数字,某个或另一个的计数)。

SQL(或至少Oracle SQL)允许您将标量查询的结果用作表达式 - 在本例中为纯数字。 “IF”分支将结果sResult设置为这两个数字的串联(在将它们隐式转换为字符串之后)。

这对我来说没什么意义;如果第一个计数是399而第二个计数是1,则结果将是字符串'3991'(不是数字,而是字符串)。顺便说一句,如果第一个计数是39,第二个计数是91,那么你将获得完全相同的结果。

注意 - 正如下面评论中所讨论的那样,我错过了原始问题的要点。 xQbert在对原始问题的评论中解释了计数本身的含义。