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
,因为您不希望结果中出现任何不匹配的行。
以下查询在 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
,因为您不希望结果中出现任何不匹配的行。