-1

我必须使用涉及超过 4 个表的 MySql DB 创建一个报告。我有一个带有 S1_ID 和 S1_Year_Range 的表 (S1)(字符串,如 2001-2002)和另一个带有 S2_ID(PK)、S2_Customer_ID、S1_ID (FK) 和其他字段的表 (S2) 以及其他可能出现在我的 Where 子句中的字段询问。S2 中可以有不止一行具有相同的 S2_Customer_ID 但不同的 S1_ID。我的查询是使用 VB.net 创建一个报告并要求用户输入两个值;一个数字表示连续多少年或更大(如 >= 5 年),以及一个年份范围值(如 2011-2012),这是所有客户列表中的最高值。

我的报告在每个客户的一列中列出了该客户的客户名称(通过将上述查询与另一个表连接)、客户排名和所有年份范围值(底部最高)。对此查询的任何帮助将不胜感激。

数据和结果可能如下所示:

S1:

(S1_ID....S1_Year_Range)

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

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

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

(4......2003-2004)

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

ETC

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)

ETC

当用户输入数字 2 和年份范围 (2003-2004) 时,结果应如下所示:

客户 3 具有 3 年范围值(2003-2004、2002-2003 和 2001-2002)和客户 4 具有 2 年范围值(2003-2004 和 2002-2003):

cname3
2001-2002

2002-2003

2003-2004


cname4
2002-2003
2003-2004

我希望你能正确地看到报告的栏目。

4

1 回答 1

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 as S2 INNER JOIN S1 as 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

高温高压

于 2013-03-04T16:22:53.550 回答