gpt4 book ai didi

sql - 项目在 SQL Server 中重复计数,相关计数逻辑无法正常工作

转载 作者:行者123 更新时间:2023-12-04 06:11:48 24 4
gpt4 key购买 nike

我正在计算来自各个机构的 RFI(信息请求)的数量。其中一些机构也是工作组(委员会)的一部分。目前,该 SQL 将机构和工作队合并到一个列表中,并为每个列表计算 RFI。问题是,如果 RFI 属于一个工作组(也分配给一个机构),我只希望它计入工作组而不是机构。但是,如果该机构没有分配给 RFI 的工作组,我希望它仍然对机构有用。 RFI 通过 _LinkEnd 表链接到各个机构,但该逻辑运行良好。这是迄今为止的逻辑:

SELECT t.Submitting_Agency, COUNT(DISTINCT t.Count) AS RFICount 
FROM (
SELECT RFI_.Submitting_Agency, RFI_.Unique_ID, _LinkEnd.EntityType_ID1, _LinkEnd.Link_ID as Count
FROM RFI_
JOIN _LinkEnd ON RFI_.Unique_ID=_LinkEnd.Entity_ID1
WHERE _LinkEnd.Link_ID LIKE 'CAS%' AND RFI_.Date_Submitted BETWEEN '20110430' AND '20110630'
UNION ALL
SELECT RFI_.Task_Force__Initiative AS Submitting_Agency, RFI_.Unique_ID, _LinkEnd.EntityType_ID1, _LinkEnd.Link_ID as Count
FROM RFI_
JOIN _LinkEnd ON RFI_.Unique_ID=_LinkEnd.Entity_ID1
WHERE _LinkEnd.Link_ID LIKE 'CAS%' AND RFI_.Date_Submitted BETWEEN '20110430' AND '20110630' AND RFI_.Task_Force__Initiative IS NOT NULL) t
GROUP BY t.Submitting_Agency

即使两个字段组合在一起,我怎样才能让它只计算一次 RFI?例如,以下是来自 RFI_ 表的示例记录:
---------------------------------------------------------------------------
| Unique_ID | Submitting_Agency | Task_Force__Initiative | Date_Submitted |
---------------------------------------------------------------------------
| 1 | Social Service | Flood Relief TF | 2011-05-08 |
---------------------------------------------------------------------------
| 2 | Faith-Based Init. | Homeless Shelter Min. | 2011-06-08 |
---------------------------------------------------------------------------
| 3 | Psychology Group | | 2011-05-04 |
---------------------------------------------------------------------------
| 4 | Attorneys at Law | | 2011-05-05 |
---------------------------------------------------------------------------
| 5 | Social Service | | 2011-05-10 |
---------------------------------------------------------------------------

因此,假设每个 RFI 只存在一个链接,则计数应如下所示:
Social Service        1
Faith-Based Unit. 0
Psychology Group 1
Attorneys at Law 1
Flood Relief TF 1
Homeless Shelter Min. 1

请注意,如果一个机构和一个工作组都在一个记录中,那么工作组获得计数,而不是机构。但该机构可能在没有工作组的情况下有记录,在这种情况下,该机构会得到计数。我怎样才能让它以这种方式工作,这样 RFI 就不会被重复计算?就目前而言,机构和工作队都被计算在内,我不希望发生这种情况。工作组总是得到计数,除非该字段为空,否则机构会得到它。

最佳答案

而不是:

SELECT t.Submitting_Agency ...

尝试
SELECT
CASE t.[Task_Force__Initiative]
WHEN NULL THEN -- Or whatever value constitutes "empty"
t.[Submitting_Agency]
ELSE
t.[Task_Force__Initiative]
END ...

然后 GROUP BY相同。

http://msdn.microsoft.com/en-us/library/ms181765.aspx

结果将是您的计数将从适当的指定分组点聚合,而不是从单个代理列聚合。

编辑:从您的示例来看,您似乎没有使用 NULL对于空字段,但可能是空字符串?在这种情况下,您需要替换 NULLCASE上面有适当的“空白”值。如果是 NULL那么你可以 COALESCE正如另一个答案中所建议的那样。

编辑:基于我认为您的架构是...以及您的 WHERE标准
SELECT 
COALESCE(RFI_.[Task_Force__Initiative], RFI_.[Submitting_Agency]),
COUNT(*)
FROM
RFI_
JOIN _LinkEnd
ON RFI_.[Unique_ID]=_LinkEnd.[Entity_ID1]
WHERE
_LinkEnd.[Link_ID] LIKE 'CAS%'
AND RFI_.[Date_Submitted] BETWEEN '20110430' AND '20110630'
GROUP BY
COALESCE(RFI_.[Task_Force__Initiative], RFI_.[Submitting_Agency])

关于sql - 项目在 SQL Server 中重复计数,相关计数逻辑无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7689826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com