Я столкнулся с выражением if then else в oracle, но я не уверен, что является целью двух операторов select count (*). Может кто-нибудь помочь мне в этом. Мне нужно разобрать это, чтобы повторно написать то же самое в t-sql. Спасибо. Вот код:oracle: select from 2 select statements value
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-сервер:
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;
это конкатенация двух отсчетов. в оракуле || является конкатенатной строкой. так же, как + для sql-сервера. один из таблицы FY_ORT_VALUES и один из значения, сопоставленного, поэтому, если для 1-го числа было 20, а для второго - 10, то вы получите sResult 2010 года. *** Oracle имеет чувствительность к регистру *** (при условии настроек по умолчанию), поэтому числа возвращаются на основе рассмотрения в ВЕРХНИХ случаях, а второй набор основан на том, как они точно отображаются в базе данных. Если nEl_ID <= 0, вы увидите возвращаемое «00». – xQbert
Включена ли чувствительность к регистру в обеих базах данных? ни? один, но не другой? Я предполагаю, что sResponse_String - это параметр, переданный в чувствительности um, устраняется в чувствительности lm, считается, что если у вас есть VAL_Description в таблице 'Florida', если sResponse_Sting был' florida', он соответствовал бы 'um', но не матч lm. поэтому в результате вы увидите 10. но в SQL-сервере с нечувствительным к регистру DB вы получите 11! – xQbert
Почему числа объединяются? Это просто странно. Но в любом случае, если вы переводите это на T-SQL, используйте функцию CONCAT вместо оператора '+', так как оператор '+' будет добавлять числа математически. – Munir