2013-02-26 98 views
-1

我必須使用MySql DB創建一個包含4個以上表格的報告。我有一個表S1_ID和S1_Year_Range(字符串如2001-2002),另一個表(S2)有S2_ID(PK),S2_Customer_ID,S1_ID(FK)和其他條件的其他字段可以出現在我的Where子句中查詢。在S2中可以有多於一行,具有相同的S2_Customer_ID但不同的S1_ID。我的查詢是使用VB.net創建一個報告,並要求用戶輸入兩個值;一個數字表示連續多年或更長時間(如> = 5年),以及年份數值(如2011-2012),這是所有客戶列表中的最高值。N或更多連續年份範圍

我的報告在每個客戶的一列中列出了該客戶的客戶名稱(通過加入上述查詢與另一個表格),客戶等級和所有年份範圍值(底部最高)。任何幫助這個查詢將不勝感激。

數據和結果可以是如下所示:

S1:

(S1_ID .... S1_Year_Range)

(1 ...... 2000-2001)

(2 ...... 2001-2002)

(3 ...... 2002-2003)

(4 ...... 2003-2 004)

(5 ...... 2004-2005)

S2:

(S2_ID ..... ..... S2_Customer_ID S1_ID)

(1 .... .... 1 1)

(2 .... .... 1 2)

(3 .... .... 1 3)

(4 .... 2 .... 2)

(5 .... 2 .... 3)

(6 .... 2 .... 5)

(7 .... 3 .... 2)

(8 .... 3 .... 3)

(9 .... 3 .... 4 )

(10 ... 3 .... 5)

(11 ... 4 .... 3)

(12 ... 4 .... 4)

(13 ... 4 ....5)

時編號2和年份範圍(2003-2004)由用戶輸入時,結果應該是以下:

客戶3 3年範圍值(2003-2004 ,2002-2003,和2001-2002)和顧客42年範圍值(2003-2004和2002-2003):

cname3
2001-2002

2002-2003

2003-2004


cname4
2002-2003
2003-2004

我希望你能正確地看到報表的列。

回答

0

我終於創建了一個複雜的查詢來解決我的問題。在下面的查詢中,我將用戶年份範圍值編碼爲「2010-2011」,連續年數編碼爲14.與問題的細微差別在於表名;表中的CSP與我的問題中的表S2相同,但字段名稱與我的問題中的相同。

SELECT CSYWFY.S2_Customer_ID,COUNT(CSYWFY.S2_Customer_ID) FROM(SELECT S1F.S1_Year_Range,S2.S2_Customer_ID,COUNT(S1F.S1_Year_Range)FROM CSP作爲S2 INNER JOIN S1作爲S1F ON S2.S1_ID = S1F.S1_ID WHERE'2010-2011'IN(SELECT S1N.S1_Year_Range FROM CSP as S2N INNER JOIN S1 as S1N ON S2N.S1_ID = S1N.S1_ID WHERE S2N.S2_Customer_ID = S2.S2_Customer_ID)GROUP BY S2.S2_Customer_ID ASC,S1F.S1_Year_Range DESC) CSYWFY GROUP BY CSYWFY.S2_Customer_ID HAVING COUNT(CSYWFY.S2_Customer_ID)> 14

HTH