【问题标题】:Count values in a table taken from a list in SQL从 SQL 中的列表中计算表中的值
【发布时间】:2016-03-10 19:40:42
【问题描述】:

我有一个由以下实例化的列表:

SELECT 
chklRefTo
FROM CSART.DBO.tblMaintenance

并返回以下内容:

chklRefTo
----------
SRH
STI
GP/Walk-in
ED/UCC
Other

还有另一列值

Ref to
-------
STI
STI,GP/Walk-in,ED/UCC
GP/Walk-in,ED/UCC
SRH,STI,ED/UCC
STI,Other

由 this 实例化:

SELECT
ReferredTo AS "Reason Not Admitted"
FROM CSART.DBO.tblPhoneConsult
WHERE ReferredTo != '' AND ReferredTo IS NOT NULL

对于第一个列表中的每个值,我需要计算每个值在第二个列表中出现的次数。理想情况下,查询结果如下所示:

Ref    Num
-----------
STI  | 3
SRH  | 1
Other| 1

我在尝试解决这个问题时运气不佳,因此我们将不胜感激任何帮助或建议。谢谢。

【问题讨论】:

    标签: sql sql-server list concatenation


    【解决方案1】:

    在 SQL Server 上:

    SELECT    chklRefTo Ref,
              COUNT(ReferredTo) Num
    FROM      tblMaintenance
    LEFT JOIN tblPhoneConsult
           ON ',' + ReferredTo + ',' LIKE '%,' + chklRefTo + ',%'
    GROUP BY  chklRefTo
    ORDER BY  2 DESC
    

    通过在JOIN 表达式中添加逗号,您可以确保子字符串不被视为匹配项。例如,它防止像 "P/W" 这样的值被视为与列表 "GP/Walk-in,ED/UCC" 匹配。

    LEFT JOIN 结合COUNT(ReferredTo) 将确保 chklRefTo 的每个值都在结果中,即使计数为 0。

    【讨论】:

      【解决方案2】:

      你可以试试这样的:

      select chklRefTo as Ref, count(*) as Num
      from CSART.DBO.tblMaintenance m
      inner join CSART.DBO.tblPhoneConsult p on p.ReferredTo like '%' + chklRefTo + '%'
      group by chklRefTo
      

      【讨论】:

        猜你喜欢
        • 2021-12-29
        • 1970-01-01
        • 2017-10-15
        • 2019-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多