【问题标题】:IF in a where in access + C #IF in a where in access + C#
【发布时间】: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 这不是问题,这些值完美运行,请阅读说明,谢谢

标签: c# sql ms-access


【解决方案1】:

您可以在 where 语句中使用 iif。但是语法起初看起来并不直观。 Where 需要布尔子句,所以你应该做的是转换

IIF (@turno     == 0, AND P.codTurno = @turno       , )

IIF (@turno= 0, -1, @turno) = P.codTurno

请注意,每次参数 @turno 的值为 0 时,我们都会将其挂起为 -1(或任何您确定不存在且不会出现在数据库的此列中的值。

所以最后你的 SQL 代码应该是这样的

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       
[and/or] IIF (@turno=0, -1, @turno) = P.codTurno
[and/or] IIF (@grado=0,-1, @grado) = P.codGrado 
[and/or] IIF (@paralelo=0, -1, @paralelo) = P.codParalelo

【讨论】:

    猜你喜欢
    • 2018-01-29
    • 1970-01-01
    • 2011-04-13
    • 2022-12-27
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多