Cross Tab Query How to Get Distinct Values

hgriff16

New Member
Hello everyone, This is my first time posting just as an FYI. I am trying to make a cross tab query that shows Location as the rows and Week Number as the Columns with a value set up in builder. Where I'm running into an issue is that in order to get the accurate value, I need the distinct count or Order ID's because items are shipped together and each shipment cost $3.5 + the sum of the part cost.. Every Time I try to group the Order ID's the locations duplicate, but the values are correct. Let me know if there is any more information you need.Thanks
 

xenou

MrExcel MVP, Moderator
Sounds like it's not working but it's not entirely clear what your sql is doing. You probably should post the query text (and some sample data if possible).
 

hgriff16

New Member
Here is the SQL data.

TRANSFORM Sum([bo5a]![Total Parts Cost]+3.5) AS Expr1
SELECT bo5a.[Service Location Name]
FROM bo5a LEFT JOIN Calander ON bo5a.[Date Fullfilled (Common)] = Calander.[2019]
WHERE (((Calander.[Period ])=10) AND ((bo5a.[National Account Flag])="N"))
GROUP BY bo5a.[Service Location Name], bo5a.[Fulfillment Order Id], Calander.[Period ], bo5a.[National Account Flag]
PIVOT Calander.Week;



and I cannot publish any sample data because it has customer information on it.
 

xenou

MrExcel MVP, Moderator
The grouping looks like it won't work that way but it is hard to say because I don't see what is being grouped. However, since you are grouping on fields that aren't in the output it is almost certainly creating extra groups that will appear as duplicate rows.

One solution would be to put the results in a temp table, then select distinct from that table - effectively removing the duplicates. (two steps).

Another would be to resolve the grouping and get the output fixed up on in a first query then do the pivot transform on the first query (also two steps).

You don't need to publish the actual data. Just dummy data that can be used to replicate the problem.
 

hgriff16

New Member
Service Location NameFulfillment Order IDDate Fulfilled (Common)Total Parts Cost
Albany110/1/2019120
Albany110/1/201940
Albany210/1/201920
Albany310/8/201945
Orlando510/1/201921
Orlando510/1/201912
Orlando610/15/201934

<colgroup><col span="2"><col><col></colgroup><tbody>
</tbody>

This is what the data basically looks like and at the end it should look like

Service Location Name Week 1 Week 2 Week 3
Albany18648
Orlando3637

<colgroup><col span="2"><col><col></colgroup><tbody>
</tbody>

So if the fulfillment order ID is the same they go on the same truck so the shipping would only be $3 per distinct fulfillment order.
 

xenou

MrExcel MVP, Moderator
using my second two step solution described above, first you preprocess the data to get something that works for the crosstab:

Code:
select 
	T.[Service Location Name], 
	T.[Date Fulfilled (Common)], 
	Sum((T.[TotalPartsCost])+3) as TotalCost

from
	(
		select 
			[Service Location Name], 
			[Date Fulfilled (Common)], 
			[Fulfillment Order ID], 
			Sum([Total Parts Cost]) as TotalPartsCost
		from
			Table13
		group by 
			[Service Location Name], 
			[Date Fulfilled (Common)], 
			[Fulfillment Order ID]
	) T

group by 
	T.[Service Location Name], 
	T.[Date Fulfilled (Common)]
Then you can cross tab it:
Code:
transform Sum(TotalCost) AS SumOfTotalCost
select 
	[Service Location Name]
from
	Query34
group by 
	[Service Location Name]
pivot 
	[Date Fulfilled (Common)];

The result of the first query is (I call this Query 34):
---------------------------------------------------------------
| Service Location Name | Date Fulfilled (Common) | TotalCost |
---------------------------------------------------------------
| Albany                | Week 1                  |       186 |
| Albany                | Week 2                  |        48 |
| Orlando               | Week 1                  |        36 |
| Orlando               | Week 3                  |        37 |
---------------------------------------------------------------


The result of the second query is (I call this Query35):
----------------------------------------------------
| Service Location Name | Week 1 | Week 2 | Week 3 |
----------------------------------------------------
| Albany                |    186 |     48 |        |
| Orlando               |     36 |        | 37     |
----------------------------------------------------



Note:
I didn't bother with the dates - not sure if you really need date data transformed into Week 1, Week 2, etc. but that would be an additional piece if so.
 
Last edited:

Some videos you may like

This Week's Hot Topics

  • Importing multiple excel files into one spreadsheet
    Hi, I'm trying to import multiple excel files (with the same format into a single spreadsheet) so that each day's file is listed underneath the...
  • find many based on a certain criteria
    good evening, I hope someone can help me? I have a workbook sheet 2 contains lots of data.... I would like to be able to find anything on sheet...
  • How to copy multiple rows using If
    Hi all, I'm very new to VBA and have written this simple code to copy certain cells if a certain cell within that row contains any data. I need...
  • VBA If statement
    Dear All, I have two dates, where I'd like a message box to pop, if the dates are between this criteria. [CODE] sDate1 = #10/1/2019#...
  • Text Format
    I have a sheet for user to keyin the data. The format of the data can be 451 / 1903, 0012 / 9908 or 00287 / 0099. The number after the "/" is...
  • Macro to copy values across rows and transposing them and add the user id
    [FONT=Times New Roman][SIZE=3][COLOR=#000000][/COLOR][/SIZE][/FONT][FONT=Calibri][SIZE=3][COLOR=#000000]Hi,[/COLOR][/SIZE][/FONT] [FONT=Times New...
Top