Solved

MS Access crosstab query -- driving me nuts

Posted on 2016-11-13
5
45 Views
Last Modified: 2016-11-13
OK -- let's say I have two unjoined tables in MS Access. I'm looking for a crosstab query that will find and count instances of each word in Table_A in the strings within records in Table_B. I've made a couple of passes using a crosstab query but get no output. I know I need to pivot the data and I know I need to use something like a Like operator but I'm having trouble assembling it into a workable query. I've actually considered doing this programmatically but thought it might be worth posting first since this is likely a cleaner solution if I can get it to work. BTW, there is no constraint on whether tables A and B can be linked or not -- just hadn't gone there yet.

Table_A
red
yellow
blue


Table_B
I have a red pomegranate.
I have a yellow banana.
I have a red apple.


Results
                        Word count
red                        2
yellow                  1
blue                        0

I'm in a design phase right now, so the table contents are actually pretty close to what my test data and tables look like. Here's a variation on one of the crosstabs I've tried so far:

TRANSFORM Count(Table_B.ID) AS CountOfID
SELECT Table_A.Word
FROM Table_A, Table_B
WHERE (((Table_B.ShortText) Like '* [Table_A].[Word] *'))
GROUP BY Table_A.Word
PIVOT Table_B.ShortText;

Any help that can be supplied here would be GREAT.
0
Comment
Question by:alfamikefoxtrot
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
5 Comments
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 41885705
try this

SELECT TableA.FieldA, Sum(IIf(InStr([TableB].[FieldB],[TableA].[FieldA])>0,1,0)) AS WordCount
FROM TableA, TableB
GROUP BY TableA.FieldA;
0
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 41885719
SELECT Table_A.Word, Sum(IIf(InStr([Table_B].[ShortText],[Table_A].[Word])>0,1,0)) AS WordCount
 FROM Table_A, Table_B
 GROUP BY Table_A.Word
0
 
LVL 47

Assisted Solution

by:Dale Fye (Access MVP)
Dale Fye (Access MVP) earned 100 total points
ID: 41885737
This is not a CrossTab query, this is a Cartesian Join, where you include two unjoined tables in a query and then use a where clause limit the recordset, although could use a non-equi join to get the same feature.

I think Rey's post should give you the answer, but a non-equi join would look like:

SELECT Table_A.Word, Count(B.Sentence) as WordCount
 FROM Table_A
LEFT JOIN Table_B ON TableB.Sentence Like "*" & TableA.Word & "*"
 GROUP BY Table_A.Word
0
 
LVL 120

Accepted Solution

by:
Rey Obrero (Capricorn1) earned 400 total points
ID: 41885740
better use this query

SELECT Table_A.Word, Sum(IIf(InStr(" " & [Table_B].[ShortText] & " "," " & [Table_A].[Word] & " ")>0,1,0)) AS WordCount
 FROM Table_A, Table_B
 GROUP BY Table_A.Word

to eliminate word embedded in another word to be counted. i.e.,   red will be counted for word like prepared
0
 

Author Closing Comment

by:alfamikefoxtrot
ID: 41885757
Excellent -- thanks to both of you. Really, nice, elegant solution. And good point on the cartesian join.
0

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction The Visual Basic for Applications (VBA) language is at the heart of every application that you write. It is your key to taking Access beyond the world of wizards into a world where anything is possible. This article introduces you to…
Describes a method of obtaining an object variable to an already running instance of Microsoft Access so that it can be controlled via automation.
Basics of query design. Shows you how to construct a simple query by adding tables, perform joins, defining output columns, perform sorting, and apply criteria.
In Microsoft Access, learn how to use Dlookup and other domain aggregate functions and one method of specifying a string value within a string. Specify the first argument, which is the expression to be returned: Specify the second argument, which …

756 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question