在另一个选择中选择案例
Posted
技术标签:
【中文标题】在另一个选择中选择案例【英文标题】:Select Case inside another Select 【发布时间】:2020-04-04 02:58:36 【问题描述】:我正在尝试将 CASE 应用于我创建的列。 但问题是我在另一个选择中有一个选择 我正在使用该子查询的值来制作选择案例 我该怎么做?
SELECT
gc.IDGastosComunes,
v.IDPropiedad,
v.Depto,
v.NombreDueno,
(SELECT u2.IDCategoria
FROM usuarios_tipos u2
WHERE u2.IDUsuario = v.IDDueno AND
u2.IDTipo = 10) AS gc.IDCategoria, <-- This return an int -> 1, 2 or 3
CASE
WHEN IDCategoria = 1 THEN 'Convenio'
WHEN IDCategoria = 2 THEN 'Plus'
WHEN IDCategoria = 3 THEN 'Preferente'
WHEN IDCategoria = 4 THEN 'Premium'
WHEN IDCategoria = 5 THEN 'La Serena'
ELSE ''
END AS Categoria, <-- This has to show the string
gc.monto,
gc.FechaEmisionPago AS Periodo
FROM
gastos_comunes gc
JOIN vcartera_propiedades v ON (v.IDPropiedad=gc.IDPropiedad)
WHERE v.IDGrupo = 1
【问题讨论】:
既然您只期望每个外部查询记录有一个匹配项,为什么不直接加入呢?它通常比相关子查询便宜。 我试过了,但情况正在削减预期的结果 【参考方案1】:您通常会在子查询中移动 case
表达式:
SELECT
gc.IDGastosComunes,
v.IDPropiedad,
v.Depto,
v.NombreDueno,
(
SELECT CASE u2.IDCategoria
WHEN 1 THEN 'Convenio'
WHEN 2 THEN 'Plus'
WHEN 3 THEN 'Preferente'
WHEN 4 THEN 'Premium'
WHEN 5 THEN 'La Serena'
ELSE ''
END
FROM usuarios_tipos u2
WHERE u2.IDUsuario = v.IDDueno AND u2.IDTipo = 10
) AS Categoria
gc.monto,
gc.FechaEmisionPago AS Periodo
FROM gastos_comunes gc
JOIN vcartera_propiedades v ON v.IDPropiedad=gc.IDPropiedad
WHERE v.IDGrupo = 1
旁注:这需要进行测试,但很可能,您的查询可以重写为使用(LEFT) JOIN
而不是内联子查询,这会使语法更短。看起来像:
SELECT
gc.IDGastosComunes,
v.IDPropiedad,
v.Depto,
v.NombreDueno,
CASE u2.IDCategoria
WHEN 1 THEN 'Convenio'
WHEN 2 THEN 'Plus'
WHEN 3 THEN 'Preferente'
WHEN 4 THEN 'Premium'
WHEN 5 THEN 'La Serena'
ELSE ''
END AS Categoria
gc.monto,
gc.FechaEmisionPago AS Periodo
FROM gastos_comunes gc
JOIN vcartera_propiedades v ON v.IDPropiedad=gc.IDPropiedad
LEFT JOIN usuarios_tipos u2 ON u2.IDUsuario = v.IDDueno AND u2.IDTipo = 10
WHERE v.IDGrupo = 1
【讨论】:
Ohhhh.. SELECT CASE IDCATEGORIA... 我是个白痴,我试过很多次,但格式错误以上是关于在另一个选择中选择案例的主要内容,如果未能解决你的问题,请参考以下文章