Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算表中的出现次数_Sql_Ms Access_Vba_Ms Access 2007 - Fatal编程技术网

Sql 计算表中的出现次数

Sql 计算表中的出现次数,sql,ms-access,vba,ms-access-2007,Sql,Ms Access,Vba,Ms Access 2007,假设我要计算列中字符串中包含的名称的出现总数,并在该名称旁边的新列中该名称的所有出现次数旁边显示该总数。例如,如果我有: Name |家庭住址|特殊ID ================================== 弗兰克| 152414 | aTRF342 简| 4342342 | rRFC432 玛丽| 423432 | xTRF353 詹姆斯| 32111111 | tLZQ399 五月三日 我如何计算特殊标记(如“TRF”、“RFC”或“LZQ”)的出现次数,因此该表如下所示:

假设我要计算列中字符串中包含的名称的出现总数,并在该名称旁边的新列中该名称的所有出现次数旁边显示该总数。例如,如果我有:

Name |家庭住址|特殊ID
==================================
弗兰克| 152414 | aTRF342
简| 4342342 | rRFC432
玛丽| 423432 | xTRF353
詹姆斯| 32111111 | tLZQ399
五月三日
我如何计算特殊标记(如“TRF”、“RFC”或“LZQ”)的出现次数,因此该表如下所示:

select Name, [Home Address], [Special ID], 
       (select count(*) from [your table] where [Special ID] = RemoveNonAlphaCharacters([Special ID]) ) as Occurrences
from [your table]
Name |家庭地址|特殊ID |事件
================================================
弗兰克| 152414 | aTRF342 | 3
简| 4342342 | rRFC432 | 1
玛丽| 423432 | xTRF353 | 3
詹姆斯| 32111111 | tLZQ399 | 1
五月三日

目前正在使用Access 2007。甚至可以使用SQL查询实现这一点吗?

您必须通过
特殊ID的子字符串对
进行分组。在MS Access中,您可以阅读有关如何计算子字符串的内容

您案例中的问题是
特殊ID
列中的数据没有遵循标准模式,该模式很容易通过
子字符串
函数提取。您可能需要使用来提取这些值,然后将
groupby
应用于这些值


使用MSSQL、Oracle、PostgreSQL,您将能够声明一个存储过程(在MS SQL Server中)来为您执行此操作。使用MS Access不确定。

您必须通过
特殊ID的子字符串对
进行分组。在MS Access中,您可以阅读有关如何计算子字符串的内容

您案例中的问题是
特殊ID
列中的数据没有遵循标准模式,该模式很容易通过
子字符串
函数提取。您可能需要使用来提取这些值,然后将
groupby
应用于这些值


使用MSSQL、Oracle、PostgreSQL,您将能够声明一个存储过程(在MS SQL Server中)来为您执行此操作。使用MS Access不确定。

您可以执行以下操作:

select Name, [Home Address], [Special ID], 
       (select count(*) from [your table] where [Special ID] = RemoveNonAlphaCharacters([Special ID]) ) as Occurrences
from [your table]
辅助功能(由此获得):


您可以这样做:

select Name, [Home Address], [Special ID], 
       (select count(*) from [your table] where [Special ID] = RemoveNonAlphaCharacters([Special ID]) ) as Occurrences
from [your table]
辅助功能(由此获得):


假设您的第一个表名为“table_with_string”

下面的代码将根据特殊ID列中字符串的前3个字符显示发生情况。因为不清楚您是如何传递字符串以进行匹配的

select tws.Name,tws.HomeAddress,tws.SpecialID,str_count.Occurrences from    
table_with_string tws
left join
(select SpecialID,count(*) from table_with_string where specialID like(substring  
(specialid,0,3))
group by specialId) as str_count(id,Occurrences)
on str_count.id=tws.SpecialID

假设您的第一个表名为“table_with_string”

下面的代码将根据特殊ID列中字符串的前3个字符显示发生情况。因为不清楚您是如何传递字符串以进行匹配的

select tws.Name,tws.HomeAddress,tws.SpecialID,str_count.Occurrences from    
table_with_string tws
left join
(select SpecialID,count(*) from table_with_string where specialID like(substring  
(specialid,0,3))
group by specialId) as str_count(id,Occurrences)
on str_count.id=tws.SpecialID

我建议您明确地将其作为一个连接来执行,这样您就可以清楚地了解它是如何工作的:

select tws.Name, tws.HomeAddress, tws.SpecialID, str_count.Occurrences
from table_with_string tws 
join
(
  select substring(spcecialid, 2, 3) as code, count(*) as Occurrences
  from table_with_string tws
  group by substring(spcecialid, 2, 3)
) s
  on s.code = substring(tws.spcecialid, 2, 3)

我建议您明确地将其作为一个连接来执行,这样您就可以清楚地了解它是如何工作的:

select tws.Name, tws.HomeAddress, tws.SpecialID, str_count.Occurrences
from table_with_string tws 
join
(
  select substring(spcecialid, 2, 3) as code, count(*) as Occurrences
  from table_with_string tws
  group by substring(spcecialid, 2, 3)
) s
  on s.code = substring(tws.spcecialid, 2, 3)

使用Access 2007,我将您的示例数据存储在名为tblUser1384831的表中。下面的查询返回此结果集

Name  Home Address Special ID special_tag Occurrences
----  ------------ ---------- ----------- -----------
Frank 152414       aTRF342    TRF                   3
Jane  4342342      rRFC432    RFC                   1
Mary  423432       xTRF353    TRF                   3
James 32111111     tLZQ399    LZQ                   1
May   4302443      3TRF322    TRF                   3
尽管您的问题带有vba标记,但您不需要为此使用vba过程。您可以使用SQL和
Mid()
函数来实现这一点

SELECT
    base.[Name],
    base.[Home Address],
    base.[Special ID],
    base.special_tag,
    tag_count.Occurrences
FROM
        (
            SELECT
                [Name],
                [Home Address],
                [Special ID],
                Mid([Special ID],2,3) AS special_tag
            FROM tblUser1384831
        ) AS base
    INNER JOIN
        (
            SELECT
                Mid([Special ID],2,3) AS special_tag,
                Count(*) AS Occurrences
            FROM tblUser1384831
            GROUP BY Mid([Special ID],2,3)
        ) AS tag_count
    ON base.special_tag = tag_count.special_tag;

使用Access 2007,我将您的示例数据存储在名为tblUser1384831的表中。下面的查询返回此结果集

Name  Home Address Special ID special_tag Occurrences
----  ------------ ---------- ----------- -----------
Frank 152414       aTRF342    TRF                   3
Jane  4342342      rRFC432    RFC                   1
Mary  423432       xTRF353    TRF                   3
James 32111111     tLZQ399    LZQ                   1
May   4302443      3TRF322    TRF                   3
尽管您的问题带有vba标记,但您不需要为此使用vba过程。您可以使用SQL和
Mid()
函数来实现这一点

SELECT
    base.[Name],
    base.[Home Address],
    base.[Special ID],
    base.special_tag,
    tag_count.Occurrences
FROM
        (
            SELECT
                [Name],
                [Home Address],
                [Special ID],
                Mid([Special ID],2,3) AS special_tag
            FROM tblUser1384831
        ) AS base
    INNER JOIN
        (
            SELECT
                Mid([Special ID],2,3) AS special_tag,
                Count(*) AS Occurrences
            FROM tblUser1384831
            GROUP BY Mid([Special ID],2,3)
        ) AS tag_count
    ON base.special_tag = tag_count.special_tag;

您如何知道给定行的代码是什么?在第一个示例中,它是前3个字符。最后一个字符是最后三个字符。编辑以使特殊标记显示在第一个字符之后的同一位置。所以我可以像Josvic建议的那样使用substr,你怎么知道给定行的代码是什么?在第一个示例中,它是前3个字符。最后一个字符是最后三个字符。编辑以使特殊标记显示在第一个字符之后的同一位置。所以我可以像Josvic建议的那样使用substr