I have a number of queries that I would like to combine into a single query, even though they have a common filtering field, I am not completely sure that what I am trying to achieve is even possible since these are all aggregate queries.
declare @salesforceId int
set @salesforceId = 109924
SELECT
AVG(CAST(qr.RatingScaleOptionId as float)) as Rating,
COUNT(*) as ReviewCount FROM QuestionResponse qr
JOIN SurveyResponse sr ON qr.SurveyResponseId = sr.SurveyResponseId
AND sr.StatusId IN (5, 7)
AND qr.QuestionId = 1 --general feedback
AND sr.RestaurantNetworkId = @salesforceId
SELECT
AVG(CAST(qr.RatingScaleOptionId as float)) as Rating,
COUNT(*) as ReviewCount FROM QuestionResponse qr
JOIN SurveyResponse sr ON qr.SurveyResponseId = sr.SurveyResponseId
AND sr.StatusId IN (5, 7)
AND qr.QuestionId = 3 --food rating
AND sr.RestaurantNetworkId = @salesforceId
SELECT
AVG(CAST(qr.RatingScaleOptionId as float)) as Rating,
COUNT(*) as ReviewCount FROM QuestionResponse qr
JOIN SurveyResponse sr ON qr.SurveyResponseId = sr.SurveyResponseId
AND sr.StatusId IN (5, 7)
AND qr.QuestionId = 4 --drinks rating
AND sr.RestaurantNetworkId = @salesforceId
SELECT
AVG(CAST(qr.RatingScaleOptionId as float)) as Rating,
COUNT(*) as ReviewCount FROM QuestionResponse qr
JOIN SurveyResponse sr ON qr.SurveyResponseId = sr.SurveyResponseId
AND sr.StatusId IN (5, 7)
AND qr.QuestionId = 5 -- restaurant ambience
AND sr.RestaurantNetworkId = @salesforceId
SELECT
AVG(CAST(qr.RatingScaleOptionId as float)) as Rating,
COUNT(*) as ReviewCount FROM QuestionResponse qr
JOIN SurveyResponse sr ON qr.SurveyResponseId = sr.SurveyResponseId
AND sr.StatusId IN (5, 7)
AND qr.QuestionId = 6 -- service rating
AND sr.RestaurantNetworkId = @salesforceId
SELECT
AVG(CAST(qr.RatingScaleOptionId as float)) as Rating,
COUNT(*) as ReviewCount FROM QuestionResponse qr
JOIN SurveyResponse sr ON qr.SurveyResponseId = sr.SurveyResponseId
AND sr.StatusId IN (5, 7)
AND qr.QuestionId = 7 -- booking service
AND sr.RestaurantNetworkId = @salesforceId
SELECT
AVG(CAST(qr.RatingScaleOptionId as float)) as Rating,
COUNT(*) as ReviewCount FROM QuestionResponse qr
JOIN SurveyResponse sr ON qr.SurveyResponseId = sr.SurveyResponseId
AND sr.StatusId IN (5, 7)
AND qr.QuestionId = 12 -- Recommend Restaurant
AND sr.RestaurantNetworkId = @salesforceId
SELECT
AVG(CAST(qr.RatingScaleOptionId as float)) as Rating,
COUNT(*) as ReviewCount FROM QuestionResponse qr
JOIN SurveyResponse sr ON qr.SurveyResponseId = sr.SurveyResponseId
AND sr.StatusId IN (5, 7)
AND qr.QuestionId = 13 -- Overall Rating
AND sr.RestaurantNetworkId = @salesforceId
SELECT
AVG(CAST(qr.RatingScaleOptionId as float)) as Rating,
COUNT(*) as ReviewCount FROM QuestionResponse qr
JOIN SurveyResponse sr ON qr.SurveyResponseId = sr.SurveyResponseId
AND sr.StatusId IN (5, 7)
AND qr.QuestionId = 525 -- Value for Money
AND sr.RestaurantNetworkId = @salesforceId
SELECT
AVG(CAST(qr.RatingScaleOptionId as float)) as Rating,
COUNT(*) as ReviewCount FROM QuestionResponse qr
JOIN SurveyResponse sr ON qr.SurveyResponseId = sr.SurveyResponseId
AND sr.StatusId IN (5, 7)
AND qr.QuestionId = 526 -- Location
AND sr.RestaurantNetworkId = @salesforceId
SELECT
count(*) as Total,
CultureInvariantText AS Tag
FROM
SurveyResponse SR
INNER JOIN
[QuestionResponseFixedOptions] QR ON SR.SurveyResponseId = QR.SurveyResponseId
INNER JOIN
QuestionResponseOption QRO ON QR.[ResponseOptionId] = QRO.[ResponseOptionId]
INNER JOIN
Question Q ON QRO.QuestionId = Q.QuestionId
INNER JOIN
LocalizableText LT ON QRO.ResponseValue = LT.LocalizableTextId
where sr.RestaurantNetworkId = @salesforceId
group by CultureInvariantText
output can be something along the lines of the following: count is the same across all queries.
|GeneralFeedback|FoodRating|....|.....|....|Count|