SQL根据值进行选择

SQL根据值进行选择,sql,oracle,if-statement,select,Sql,Oracle,If Statement,Select,我需要建议或想法如何解决我的问题。 我已经选择了基于几个连接。 其中一个选定值是ex.CA.PADDING\u ZERO\u标志,它是“0”或“1” 基于此,我想在select语句中获取其他值 伪代码: Select if(CA.PADDING_ZERO_FLAG = '1') then LPAD(ZR.START_ZIP_CODE, 5, '0'), LPAD(ZR.END_ZIP_CODE, 5, '0') else ZR.START_ZIP_CODE, ZR.END_ZIP_COD

我需要建议或想法如何解决我的问题。 我已经选择了基于几个连接。 其中一个选定值是ex.
CA.PADDING\u ZERO\u标志
,它是“0”或“1”

基于此,我想在select语句中获取其他值

伪代码:

Select if(CA.PADDING_ZERO_FLAG = '1') then LPAD(ZR.START_ZIP_CODE, 5, '0'),
    LPAD(ZR.END_ZIP_CODE, 5, '0') else ZR.START_ZIP_CODE, ZR.END_ZIP_CODE
有可能吗


提前感谢

您可以使用解码功能

select 
  decode(CA.PADDING_ZERO_FLAG,
      '1', LPAD(ZR.START_ZIP_CODE, 5, '0'),
      '0', ZR.START_ZIP_CODE) START_ZIP_CODE,
  decode(CA.PADDING_ZERO_FLAG,
      '1', LPAD(ZR.END_ZIP_CODE, 5, '0'),
      '0', ZR.END_ZIP_CODE) END_ZIP_CODE
      ...

案例陈述将适用于此

SELECT
  CASE
     WHEN CA.PADDING_ZERO_FLAG = '1' 
         THEN 
             LPAD(ZR.START_ZIP_CODE, 5, '0')
         ELSE 
             ZR.START_ZIP_CODE
  END as 'START_ZIP_CODE',
  CASE
     WHEN CA.PADDING_ZERO_FLAG = '1' 
         THEN 
             LPAD(ZR.END_ZIP_CODE, 5,'0')
         ELSE 
             ZR.END_ZIP_CODE
  END as 'END_ZIP_CODE'

我想这会满足你的需要。我想你的查询是错误的,在单格语句中不能有多个列是的,你是对的。我应该把它们分别放在每个专栏的案例陈述中。。。已经编辑过了,你说得对。我还需要在case的内部调用函数来表示邮政编码上的字符,因为它们是数字数据类型,并将列标识符更改为双引号,例如END为“START\u zip\u CODE”