Fizz buzz SQL逻辑错误

Fizz buzz SQL逻辑错误,sql,oracle,Sql,Oracle,-SQL中的1到100,如果数字可被3整除,则显示“Fizz”;如果数字可被5整除,则显示“Buzz”;如果数字可被两者整除,则显示“FizzBuzz”。下面是我的代码 select Case when Remainder (rownum,3)=0 then 'Fizz' when Remainder (rownum,5)=0 then 'Buzz' when (remainder (rownum,3)=0 and remainder(ROWNUM,5) = 0) th

-SQL中的1到100,如果数字可被3整除,则显示“Fizz”;如果数字可被5整除,则显示“Buzz”;如果数字可被两者整除,则显示“FizzBuzz”。下面是我的代码

select 
Case when   Remainder (rownum,3)=0 then 'Fizz'
     when Remainder (rownum,5)=0 then 'Buzz'
     when (remainder (rownum,3)=0 and remainder(ROWNUM,5) = 0) then 'FizzBuzz'
     else rownum end 
from DUAL
Connect by level  <=100;
选择
当余数(rownum,3)=0时,则为“嘶嘶”
当余数(rownum,5)=0时,则为“嗡嗡声”
当(余数(rownum,3)=0,余数(rownum,5)=0)时,则“嘶嘶嘶嘶”
else rownum end
来自双重

按级别连接在else语句中。Rownum是一个数字,而Fizz、Buzz和FizzBuzz是CHAR。

在else语句中。Rownum是一个数字,而Fizz、Buzz和FizzBuzz是CHAR。

select
select 
Case when   Remainder (rownum,3)=0 then 'Fizz'
     when Remainder (rownum,5)=0 then 'Buzz'
     when (remainder (rownum,3)=0 and remainder(ROWNUM,5) = 0) then 'FizzBuzz'
     else ''||rownum end 
from DUAL
Connect by level  <=100;
当余数(rownum,3)=0时,则为“嘶嘶” 当余数(rownum,5)=0时,则为“嗡嗡声” 当(余数(rownum,3)=0,余数(rownum,5)=0)时,则“嘶嘶嘶嘶” else“”| | rownum end 来自双重 按级别连接<代码>选择 当余数(rownum,3)=0时,则为“嘶嘶” 当余数(rownum,5)=0时,则为“嗡嗡声” 当(余数(rownum,3)=0,余数(rownum,5)=0)时,则“嘶嘶嘶嘶” else“”| | rownum end 来自双重
按级别连接您需要通过以下任一方式将
ROWNUM
转换为
ELSE
案例中的字符串:

  • CAST(ROWNUM作为VARCHAR2(3))
  • ”|| ROWNUM
  • TO_CHAR(ROWNUM)
您还需要将同时可被3和5整除的大小写放在列表的顶部(否则前面的大小写将优先)。像这样:

SELECT CASE 
       WHEN remainder (rownum,15)=0 THEN 'FizzBuzz'
       WHEN Remainder (rownum,3)=0  THEN 'Fizz'
       WHEN Remainder (rownum,5)=0  THEN 'Buzz'
       ELSE TO_CHAR(rownum)
       END 
FROM   DUAL
CONNECT BY LEVEL <= 100;
选择案例
当余数(rownum,15)=0时,则为'FizzBuzz'
当余数(rownum,3)=0时,则为“嘶嘶”
当余数(rownum,5)=0时,则为“嗡嗡声”
ELSE TO_CHAR(rownum)
结束
来自双重

按级别连接您需要通过以下任一方式将
ROWNUM
转换为
ELSE
案例中的字符串:

  • CAST(ROWNUM作为VARCHAR2(3))
  • ”|| ROWNUM
  • TO_CHAR(ROWNUM)
您还需要将同时可被3和5整除的大小写放在列表的顶部(否则前面的大小写将优先)。像这样:

SELECT CASE 
       WHEN remainder (rownum,15)=0 THEN 'FizzBuzz'
       WHEN Remainder (rownum,3)=0  THEN 'Fizz'
       WHEN Remainder (rownum,5)=0  THEN 'Buzz'
       ELSE TO_CHAR(rownum)
       END 
FROM   DUAL
CONNECT BY LEVEL <= 100;
选择案例
当余数(rownum,15)=0时,则为'FizzBuzz'
当余数(rownum,3)=0时,则为“嘶嘶”
当余数(rownum,5)=0时,则为“嗡嗡声”
ELSE TO_CHAR(rownum)
结束
来自双重

按级别连接将rownum强制转换为varchar2将rownum强制转换为varchar2de,因为缺少错误的大小写表达式分支顺序(请参阅MT0的答案以获取解释)@mathguy有点苛刻,因为这确实回答了问题的主要焦点<;code>ORA-00932
异常的问题。由于缺少case-expression分支的错误顺序(请参见MT0的答案以获取解释),因此取消对该问题的评分@mathguy有点苛刻,因为这确实回答了
ORA-00932
异常的问题,这是问题的主要焦点。非常感谢你让我开心!非常感谢你让我开心!
SELECT NVL(
         DECODE(MOD(LEVEL,3),0,'Fizz')||DECODE(MOD(LEVEL,5),0,'Buzz'),
         ''||LEVEL
       )
FROM DUAL
CONNECT BY LEVEL<101