2

列内の文字列に含まれる名前の出現回数の合計をカウントし、その名前の出現回数すべての横にある新しい列の横にその合計を表示するとします。たとえば、私が持っている場合:

Name  | Home Address | Special ID 
==================================
Frank | 152414       | aTRF342
Jane  | 4342342      | rRFC432
Mary  | 423432       | xTRF353
James | 32111111     | tLZQ399
May   |    4302443   | 3TRF322

'TRF'、'RFC'、または'LZQ'などの特別なタグの出現をカウントして、テーブルが次のようになるようにするにはどうすればよいですか。

Name  | Home Address | Special ID  | Occurrences
================================================
Frank | 152414       | aTRF342     |     3
Jane  | 4342342      | rRFC432     |     1
Mary  | 423432       | xTRF353     |     3
James | 32111111     | tLZQ399     |     1
May   |    4302443   | 3TRF322     |     3

現在Access2007を使用しています。これはSQLクエリを使用しても可能ですか?

4

5 に答える 5

0

あなたはこのようなことをすることができます:

select Name, [Home Address], [Special ID], 
       (select count(*) from [your table] where [Special ID] = RemoveNonAlphaCharacters([Special ID]) ) as Occurrences
from [your table]

補助機能(このリンクから取得):

Create Function [dbo].[RemoveNonAlphaCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin

    While PatIndex('%[^a-z]%', @Temp) > 0
        Set @Temp = Stuff(@Temp, PatIndex('%[^a-z]%', @Temp), 1, '')

    Return @Temp
End
于 2012-05-09T14:39:21.203 に答える
0

最初のテーブルが「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
于 2012-05-09T14:47:54.133 に答える
0

GROUP BYの部分文字列が必要になりSpecial IDます。MS Accessでは、ここで部分文字列を計算する方法について読むことができます。

あなたの場合の問題は、Special ID列のデータが標準パターンに従わないことです。これは、substring関数を介して簡単に抽出できます。このような値を抽出し、後でそれらに適用するには、正規表現を使用する必要がある場合がありGROUP BYます。

MSSQL、Oracle、PostgreSQLを使用すると、これを実行するストアドプロシージャ(MS SQL ServerのCLR関数の例)を宣言できます。MSAccessについてはよくわかりません。

于 2012-05-09T14:33:25.170 に答える
0

これを結合として明示的に行うことをお勧めします。これにより、どのように機能するかが明確になります。

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)
于 2012-05-09T15:46:50.177 に答える
0

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;
于 2012-05-09T16:38:10.197 に答える