我正在使用我创建的SQL存储参数来构建报告。它提取的数据可能是每个唯一编号1行,或者每个唯一编号2行。我只想显示只有1行的行。
我尝试了更改可见性,但是最接近的是
=IIF(Fields!uniquenumber.Value = previous(Fields!uniquenumber.value,True,False)
但是这隐藏了其中的一行,但不是全部。我还尝试在查询中使用CASE WHEN来识别是否有多于1行,但是当多于1行时,我仍然无法隐藏。我的查询如下(删除了很多与我的问题无关的额外条件。在很多情况下,我的WHERE语句的第一部分将包含也符合第二部分条件的数据。
SELECT
Reorders.LastRxNo,
Reorders_1.LastRxNo AS Reorders1LastRxNo,
Rxs_2.RxBatch AS Rxs2RxBatch,
Reorders.FacID,
KeyIdentifiers.GPI,
Reorders.LastFillDt,
Rxs_1.RxBatch as Rxs1RxBatch,
CASE
WHEN (Reorders.LastRxNo<>Reorders_1.LastRxNo) THEN 1
ELSE 0
END AS Duplicate
FROM Reorders
LEFT OUTER JOIN Rxs AS Rxs_1
ON Reorders.LastRXNo = Rxs_1.RxNo
RIGHT OUTER JOIN KeyIdentifiers
ON Reorders.NDC = KeyIdentifiers.NDC
INNER JOIN Patients
ON Reorders.FacID = Patients.FacID
AND Reorders.PatID = Patients.PatID
LEFT OUTER JOIN Reorders AS Reorders_1
ON Reorders.FacID = Reorders_1.FacID
AND Reorders.PatID = Reorders_1.PatID
AND KeyIdentifiers.NDC = Reorders_1.NDC
LEFT OUTER JOIN Rxs AS Rxs_2
ON Reorders_1.LastRxNo = Rxs_2.RxNo
WHERE
Reorders.ProfileOnly = 1
AND Rxs_1.RxBatch IS NULL
AND Reorders.CutOffDt IS NULL
AND Reorders.PackType LIKE 'PHDEF%'
AND Reorders.Auto = 1
AND Reorders.PhRxStatus IS NULL
AND Reorders.LastFillDt > '01/01/2019'
AND (Reorders.LastRxNo = Reorders_1.LastRxNo
OR Reorders.LastRxNo <> Reorders_1.LastRxNo AND Rxs_2.RxBatch IN ('CF','GONE'))
ORDER BY Reorders.FacID, Patients.PatLName, Patients.PatFName
产量类似于:
LastRxNo Reorders1LastRxNo Rxs2RxBatch Duplicate
111 111 null 0
222 222 null 0
222 444 CF 1
在上面的示例中,我只需要看到类似于第1行的行。由于“ LastRxNo” 222有2行,因此我不想在最终报告中看到它。 (但是,由于如果LastRxNo = 222 AND Reorders1LastRxNo = 222并且Rxs2RxBatch IS NULL,如果我不在WHERE语句中说明这一点,它将被拉出。我想。我很乐意这样做,无论是在查询中或在SSRS报告中。
答案 0 :(得分:0)
仅过滤掉行数大于1的所有行。
SELECT LastRxNo, RxBatch
FROM Reorders
WHERE RxBatch IN ('CF','GONE')
AND Reorders.LastRxNo IN
(SELECT LastRxNo FROM Reorders GROUP BY LastRxNo HAVING COUNT(LastRxNo) = 1)
您应该只能够将最后两行添加到WHERE子句中。
或者,您可以将其添加到JOIN条件中:
SELECT
Reorders.LastRxNo
FROM Reorders
INNER JOIN (
SELECT LastRxNo FROM Reorders
GROUP BY LastRxNo
HAVING COUNT(LastRxNo) = 1
) AS UniqueRxNo ON UniqueRxNo.LastRxNo = Reorders.LastRxNo
答案 1 :(得分:0)
将您的CASE ...替换为
COUNT(*) OVER(PARTITION BY LastRxNo) AS LastRxNoCount
然后
将整个查询换成另一个这样的选择...
SELECT * FROM
(
your original query here including the change stated above
) q
WHERE q.LastRxNoCount =1
答案 2 :(得分:-1)
是的,您可以通过以下两种方式之一进行操作: