2016-07-05 66 views
0

所以,我的問題標題可能不正確,但我需要一些幫助來弄清楚這一點。查找相同的行,將其結果跨多個表結合起來

所以要畫你的照片。我在MSSQL作了如下模型(目前忽略SR_表):

enter image description here

簡言之;這裏提供的數據用於生成關於我所工作公司航班的客戶滿意度的報告。我必須在Excel中生成報告,其中顯示了幾件事情:

  • 什麼是本週的平均評級,今年的航班?
  • 同一時間段的平均評級與前一年的路線相同嗎?
  • 基於這一週,今年有多少次調查?
  • 基於這一週,前一年有多少次調查?

而我必須這樣做(目前)13個問題。這將是一個很長的報告,但這是他們要求的。這裏是什麼樣子在Excel中的例子:

enter image description here

現在,這裏是我開始得到關於如何解決我需要數據庫的查詢,有點不知所措。我有一個結果,像這樣:

enter image description here

第一批是從今年(我知道它說2013,我們仍然從以前的系統中遷移數據)和第二批是從前年。現在,前一年沒有任何可比數據到今年的任何航班,因此它們將在報告中被丟棄,並且不計算在內。就是這樣。但從今年的批次來看,您會注意到其中的兩個航班是相同的航線。這意味着我必須獲得這兩個航班所指向的所有調查(SurveyData-> Surveys-> AnswersRating)並將它們放在一起,以便在最後將它們視爲一個航班。

我無法弄清楚在SQL中如何處理這個問題,這樣我就可以找到那些相同的路線,並將它們與前一年(如果有的話)進行配對,但在配對之前將它們放在一起,視爲一條單一路線。

如果我查詢AnswersRating表得到所有的答案,那是由客戶對飛行充滿了調查,您看到下面的:

enter image description here

目前,每13個問題,你有1次調查,但實際上,您在右側看到的所有問題只能在調查中出現一次。

我希望我對自己的問題足夠清楚。任何關於我如何去做的線索?

+0

你能告訴我們你當前的查詢嘗試嗎?它出什麼問題了?你有使用GROUP BY,AVG,COUNT等嗎? – jarlh

+0

您是否也可以將您期望輸出查詢的外觀放在一起? – JeffUK

回答

1

爲什麼不通過cte使用相同的路徑評估所有的ID,然後獲取這個/上一年的詳細信息?可能看起來像這樣:

WITH cte AS(
    SELECT ID 
    FROM ... 
    GROUP BY AirportFrom, AirportTo 
    [Where...] 
) 
SELECT * 
    FROM ... AS a 
    JOIN cte AS b ON a.id = b.id 
+0

我從來沒有在查詢中使用過。 – OmniOwl

+0

因此是這個例子。 ;-)基本上,cte是一個輕鬆處理子查詢的「工具」。您可以在查詢中和連接內使用它們 - 作爲表格,視圖等。因此,如果您在cte中獲得所有ID,則可以使用這些獲取詳細信息或創建總和,計數等。 – Tyron78

+0

嗯,好的。似乎我不得不更多地瞭解這一點。謝謝。 – OmniOwl

1

你需要使用相關的查詢。

例如:同一時間段的平均評級與前一年相同嗎?

此解決方案可能對您的數據庫不完全正確,但它會指示您如何解決它。

Select AVG(rating), Flightperiod, FlightID 
from Answersrating ar 
join Surveys s on s.ID = ar.surveryID 
join SurveryData sd on s.surveyDataID = sd.ID 
where Flightperiod = (Select Flightperiod 
         from SurveyData sd2 
         where sd.flightID = sd2.flightID 
         and Flightperiod = DATEADD(year, 1 ,CurDate())) --today 1 year ago. You might need to alter this date to suit your needs. 

這將返回每個航班(ID)的AVG評級,但飛行期間爲一年前。

相關問題