【发布时间】:2018-09-06 15:29:49
【问题描述】:
如何在 where 中执行 IFF,在哪里执行过滤器,在我的情况下,我希望以 0 值到达的参数不会影响我的查询,只需忽略它们 em>
string query = @"
SELECT
P.NombreCompleto
FROM (((((((Persona AS P
LEFT JOIN MarcacionTemp AS MTemp ON P.codPersona = MTemp.codPersona)
LEFT JOIN Horario AS Ho ON MTemp.codHorario = Ho.idHorario)
LEFT JOIN TipoMarcacion AS TMar ON MTemp.codTipoMarcacion = TMar.idMarcacion)
INNER JOIN Colegio AS C ON P.codColegio = C.codColegio)
INNER JOIN Entidad AS E ON P.codEntidad = E.codEntidad)
INNER JOIN Grado AS Gr ON P.codGrado = Gr.codGrado)
INNER JOIN Paralelo AS Pa ON P.codParalelo = Pa.codParalelo)
INNER JOIN Turno AS Tu ON P.codTurno = Tu.codTurno
WHERE P.codTipo = 4
IIF (@turno == 0, AND P.codTurno = @turno , )
IIF (@grado == 0, AND P.codGrado = @grado , )
IIF (@paralelo == 0, AND P.codParalelo = @paralelo , )";
OleDbCommand command = new OleDbCommand(query, connection);
command.Parameters.AddWithValue("@fecha", dTPGrado.Value.Date);
command.Parameters.AddWithValue("@turno", codTurno);
command.Parameters.AddWithValue("@grado", codGrado);
command.Parameters.AddWithValue("@paralelo", codParalelo);
adapter.SelectCommand = command;
DataSet.Clear();
【问题讨论】:
-
你不要,使用内置的逻辑运算符,例如
... AND (@turno = 0 OR P.codTurno = @turno) ... -
@AlexK。你是天才,但我只需要 4 个人...... :( 请写下你的解决方案,非常好
-
@AndrewMorton 这不是问题,这些值完美运行,请阅读说明,谢谢