Solved

MS Access crosstab query -- driving me nuts

Posted on 2016-11-13
5
31 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
  • 3
5 Comments
 
LVL 119

Expert Comment

by:Rey Obrero
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 119

Expert Comment

by:Rey Obrero
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 119

Accepted Solution

by:
Rey Obrero 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

When you are entering numbers in a speadsheet, and don't remember what 6×7 is, you just type “=6*7" instead. It works in every cell! This is not so in Access. To enter the elusive 42 in a text box, you have to find a calculator, and then copy the re…
Introduction When developing Access applications, often we need to know whether an object exists.  This article presents a quick and reliable routine to determine if an object exists without that object being opened. If you wanted to inspect/ite…
Learn how to number pages in an Access report over each group. Activate two pass printing by referencing the pages property: Add code to the Page Footers OnFormat event to capture the pages as there occur for each group. Use the pages property to …
In Microsoft Access, learn different ways of passing a string value within a string argument. Also learn what a “Type Mis-match” error is about.

863 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

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now