Cross Tab Query How to Get Distinct Values

hgriff16

New Member
Joined
Jul 29, 2019
Messages
4
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
Joined
Mar 2, 2007
Messages
16,527
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
Joined
Jul 29, 2019
Messages
4
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
Joined
Mar 2, 2007
Messages
16,527
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
Joined
Jul 29, 2019
Messages
4
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
Joined
Mar 2, 2007
Messages
16,527
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:

Forum statistics

Threads
1,078,462
Messages
5,340,454
Members
399,376
Latest member
Tresfjording

Some videos you may like

This Week's Hot Topics

  • Problem with Radio Button's format control
    I am creating an employee evaluation template (a sample is below) Column A is the category Column B, C D, E and F will be ratings (unacceptable...
  • Last Display on userform to a Listbox
    [CODE=vba] lstdisplay.ColumnCount = 15 lstdisplay.RowSource = "A1:O600000" [/CODE] So when i do this it Displays everything on the sheet i am...
  • Rename and move files to a new location
    Dear all, I have an excel file with the following information. The actual file name is at column A but i want to rename it using the following...
  • Help with True/False Formula
    Hello! Am stumped how to fix this formula, in which my result returns 'True', but it should return False. =IF(AG2=True...
  • Clear extra characters from a provided range of cells
    Dear All, I have following code which gives me desired output to remove extra characters from a provided range. But it takes too much time when...
  • Help with Current and highest streaks
    Hi there, I've just joined the forum and this is my first post. I've already spent quite a bit of time searching the net and this forum for a...
Top