1

I am having trouble creating pivot table that follows the schema described below. For example, with the following table (not all records are shown here):

Route Bus_Fare_Payment_Method Total_Annual_Household_Income
Route 1 10-Ride Pass $15K To $19K
Route 1 10-Ride Pass $15K To $19K
Route 1 10-Ride Pass $25K To $29K
Route 1 10-Ride Pass $60K Or More
Route 1 Regular Cash Fare Under $10K
Route 1 Regular Cash Fare Under $10K
Route 1 Regular Cash Fare Under $10K
Route 1 Regular Cash Fare Under $10K
Route 1 Regular Cash Fare Under $10K
Route 1 Regular Cash Fare Under $10K
Route 1 Regular Cash Fare Under $10K
Route 1 Regular Cash Fare Under $10K
Route 10 10-Ride Pass $30K To $39K
Route 10 31-Day Adult $10K To $14K
Route 10 31-Day Adult $10K To $14K
Route 10 31-Day Adult $10K To $14K
Route 10 31-Day Adult $10K To $14K
Route 10 31-Day Adult $15K To $19K
Route 10 31-Day Adult $20K To $24K
Route 10 31-Day Adult $20K To $24K
Route 10 31-Day Adult $20K To $24K
Route 10 31-Day Adult $20K To $24K
Route 101 All Day Pass Reduced Under $10K
Route 101 Other Under $10K
Route 101 Reduced Fare $10K To $14K
Route 101 Reduced Fare $25K To $29K
Route 101 Reduced Fare $30K To $39K
Route 101 Reduced Fare $40K To $49K
Route 101 Reduced Fare $60K Or More
Route 101 Reduced Fare $60K Or More
Route 101 Reduced Fare $60K Or More
Route 101 Reduced Fare Under $10K
Route 101 Reduced Fare Under $10K
Route 101 Reduced Fare Under $10K
Route 101 Regular Cash Fare $10K To $14K
Route 101 Regular Cash Fare $10K To $14K
Route 101 Regular Cash Fare $10K To $14K
Route 101 Regular Cash Fare $10K To $14K

I would like to produce the following table:

Route Bus_Fare_Payment_Method $10K To $14K $15K To $19K $20K To $24K $25K To $29K $30K To $39K $40K To $49K $60K Or More Under $10K
Route 1 10-Ride Pass 2 1 1
Route 1 31-Day Adult
Route 1 All Day Pass Reduced
Route 1 Other
Route 1 Reduced Fare
Route 1 Regular Cash Fare 8
Route 10 10-Ride Pass 1
Route 10 31-Day Adult 4 1 4
Route 10 All Day Pass Reduced
Route 10 Other
Route 10 Reduced Fare
Route 10 Regular Cash Fare
Route 101 10-Ride Pass
Route 101 31-Day Adult
Route 101 All Day Pass Reduced 1
Route 101 Other 1
Route 101 Reduced Fare 1 1 1 1 3 3
Route 101 Regular Cash Fare 4

I am able to create the following table with the query included below, but I am missing the Route field which I need as part of my output (as shown above).

SELECT [Bus_Fare_Payment_Method] "Bus Fare Payment Method", [Under $10k] 'Under $10k', [$10K to $14K] '$10K to $14K',[$15k to $19k] '$15k to $19k', [$20k to $24k] '$20k to $24k', [$25k to $29k] '$25k to $29k', [$30k to $39k] '$30k to $39k', [$40k to $49k] '$40k to $49k', [$50k to $59k] '$50k to $59k', [$60k or more] '$60k or more'
FROM   
(SELECT [Route], [Total_Annual_Household_Income], [Bus_Fare_Payment_Method]  
FROM [BCT_TDP_SURVEY_2018] where [Bus_Fare_Payment_Method] != '' ) p  
PIVOT  
(  
COUNT ([Route])  
FOR [Total_Annual_Household_Income] IN  
( [Under $10k], [$10K to $14K],[$15k to $19k], [$20k to $24k], [$25k to $29k], [$30k to $39k], [$40k to $49k], [$50k to $59k], [$60k or more] )  
) AS pvt  
ORDER BY pvt.[Bus_Fare_Payment_Method]
Bus_Fare_Payment_Method $10K To $14K $15K To $19K $20K To $24K $25K To $29K $30K To $39K $40K To $49K $60K Or More Under $10K
10-Ride Pass 2 1 1 1
31-Day Adult 4 1 4
All Day Pass Reduced 1
Other 1
Reduced Fare 1 1 1 1 3 3
Regular Cash Fare 4 8
2
  • You omitted it on your SELECT; of course it won't be there. In Though I suggest using conditional aggregation over the restrictive Pivot operator. Commented Dec 3, 2021 at 14:05
  • @Larnu thanks for your quick response. I have tried that already with no luck. It returns the following error: Invalid column name 'Route'. Commented Dec 3, 2021 at 14:52

1 Answer 1

1

As I mentioned in the comments, you are far better off using conditional aggregation over the restrictive PIVOT operator:

SELECT Route,
       Bus_Fare_Payment_Method,
       COUNT(CASE Total_Annual_Household_Income WHEN '$15K To $19K' THEN 1 END) AS [$15K To $19K],
       COUNT(CASE Total_Annual_Household_Income WHEN '$25K To $29K' THEN 1 END) AS [$25K To $29K],
       ...
FROM dbo.YourTable
GROUP BY Route,
         Bus_Fare_Payment_Method;
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.