La forma básica, desafortunadamente, es repetirse.
SELECT
CASE WHEN <condition 1> THEN <a1> WHEN <condition 2> THEN <a2> ELSE <a3> END,
CASE WHEN <condition 1> THEN <b1> WHEN <condition 2> THEN <b2> ELSE <b3> END
FROM
<table>
Afortunadamente, la mayoría de los RDBMS son lo suficientemente inteligentes como para NO tener que evaluar las condiciones varias veces. Es solo tipeo redundante.
En MS SQL Server (2005+) que podría CRUZ posible uso se aplican como una alternativa a esto. Aunque no tengo idea de lo que es ... performant
SELECT
*
FROM
<table>
CROSS APPLY
(
SELECT a1, b1 WHERE <condition 1>
UNION ALL
SELECT a2, b2 WHERE <condition 2>
UNION ALL
SELECT a3, b3 WHERE <condition 3>
)
AS case_proxy
La desventaja notable aquí es que no hay equivalente ELSE y como todas las condiciones podrían todos los valores de retorno, tienen que estar enmarcada tal que sólo uno puede ser verdad a la vez.
EDITAR
Si la respuesta de Yuck se cambia a una unión en lugar de JOIN enfoque, se hace muy similar a este. La principal diferencia, sin embargo, es que esto solo escanea el conjunto de datos de entrada una vez, en lugar de una vez por condición (100 veces en su caso).
EDITAR
También he notado que puede significar que los valores devueltos por las instrucciones CASE son fijos. Todos los registros que coinciden con la misma condición obtienen los valores exactos de sames en value1 y value2. Esto podría formarse así ...
WITH
checked_data AS
(
SELECT
CASE WHEN <condition1> THEN 1
WHEN <condition2> THEN 2
WHEN <condition3> THEN 3
...
ELSE 100
END AS condition_id,
*
FROM
<table>
)
,
results (condition_id, value1, value2) AS
(
SELECT 1, a1, b1
UNION ALL
SELECT 2, a2, b2
UNION ALL
SELECT 3, a3, b3
UNION ALL
...
SELECT 100, a100, b100
)
SELECT
*
FROM
checked_data
INNER JOIN
results
ON results.condition_id = checked_data.condition_id
¿Es esto MS SQL Server? – MatBailie
sí, es ...... – yzhang
¿Puede aclarar su situación? Por ejemplo, ¿las 100 condiciones de caso diferentes conducen a 100 valores aplicables diferentes para cada valor1 y valor2, o muchas de las 100 condiciones diferentes producirán los mismos resultados? ¿Son todas las condiciones completamente combinaciones de diferentes campos, o son diferentes valores posibles de un solo campo? –