Return 行,当两个条件都为真时

Return Rows, when two conditions that are true

以下查询在 returning 数据中按预期工作正常:

SELECT DISTINCT
    CONVERT(varchar, b.bookindt, 101) AS [book-in date],
    b.bookinno AS [book-in no.],
    dbo.fn_getoffensedesc(o.offenseid, o.probviolation,
                          (select offense from trdcode61 
                           where code61id = o.code61id), o.goc) AS offensedescription,
    o.PrimaryOffense AS [Primary Offense],
    trd.l_d AS [offense l/d],
    p.firstname AS [first name],
    p.lastname AS [last name]
FROM
    tblpeople p
LEFT OUTER JOIN 
    tbloffense o (NOLOCK) ON o.personid = p.personid 
LEFT OUTER JOIN 
    tblbookin b (NOLOCK) ON b.bookinid = o.bookinid 
LEFT OUTER JOIN 
    trdcode61 trd (NOLOCK) ON trd.code61id = o.code61id 
WHERE
    dbo.fn_isinjailbybookinid(b.bookinid) = 1 
    -- AND b.bookinno='21042173'
    AND (trd.l_d LIKE 'F%' OR trd.l_d LIKE 'M%')
ORDER BY
    p.lastname, p.firstname 

下面是单个“bookinno”的结果截图更清楚:

我需要查询方面的帮助,它查看“登记号”。列并且如果“违规 l/d”列包含 (trd.l_d like 'F%' AND trd.l_d like 'M%'),则 return 即“登记号”。结果。

当我尝试 运行 和 AND 时,结果为零。

我有“登记号”。只有“F%”或只有“M%”。

非常感谢任何帮助。

此致, 杰尔

您可以使用您的条件过滤结果集,按 bookinno 分组并在 HAVING 子句中设置条件,以便两个条件都适用于 bookinno:

SELECT b.bookinno AS [book-in no.]
FROM tblpeople p
INNER JOIN tbloffense o ON o.personid = p.personid 
INNER JOIN tblbookin b ON b.bookinid = o.bookinid 
INNER JOIN trdcode61 trd ON trd.code61id = o.code61id 
WHERE dbo.fn_isinjailbybookinid(b.bookinid) = 1 
  AND (trd.l_d LIKE 'F%' OR trd.l_d LIKE 'M%')
GROUP BY b.bookinno
HAVING COUNT(DISTINCT LEFT(trd.l_d, 1)) = 2;

请注意,此要求的联接应该是 INNER 而不是 LEFT,因为您不希望结果中出现任何不匹配的行。