![]() |
#2
风吹过b2013-08-08 09:59
没看懂。
不知你是不是要这样的结果: T_ID M_ID P_ID Count_P Count_Total Ratio 0102 01001 0 2 3 66.67 0102 01001 1 1 3 33.33 0103 01003 1 1 1 100 0103 02001 1 1 1 100 0204 02001 0 2 3 66.67 0204 02001 2 1 3 33.33 0103 02002 2 1 1 100 由3个查询得到。 查询1: SELECT C_History.T_ID, P_History.M_ID, count(P_History.P_ID) AS Count_Total FROM C_History INNER JOIN P_History ON C_History.C_ID=P_History.C_ID GROUP BY P_History.M_ID, C_History.T_ID; 执行结果: T_ID M_ID Count_Total 0102 01001 3 0103 01003 1 0103 02001 1 0204 02001 3 0103 02002 1 查询2: SELECT C_History.T_ID, P_History.M_ID, P_History.P_ID, Count(P_History.P_ID) AS Count_P FROM C_History INNER JOIN P_History ON C_History.C_ID=P_History.C_ID GROUP BY C_History.T_ID, P_History.M_ID, P_History.P_ID; 执行结果: T_ID M_ID P_ID Count_P 0102 01001 0 2 0102 01001 1 1 0103 01003 1 1 0103 02001 1 1 0103 02002 2 1 0204 02001 0 2 0204 02001 2 1 查询3: SELECT 查询2.T_ID, 查询2.M_ID, 查询2.P_ID, 查询2.Count_P, 查询1.Count_Total, Round(查询2.Count_P/查询1.Count_Total*100,2) AS Ratio FROM 查询2 INNER JOIN 查询1 ON (查询2.T_ID = 查询1.T_ID) AND (查询2.M_ID = 查询1.M_ID); 执行查询3 得到上面的结果。 执行查询3时,不需要再执行 查询1和查询2,会自动调用,我不知道VB 里会不会也这样自动,应该会的。 对应的表的内容如下: C_ID T_ID 20120102 0102 20120103 0102 20120104 0102 20120105 0103 20120106 0204 20120107 0204 20120108 0204 20120109 0103 20120110 0103 C_ID M_ID P_ID 20120102 01001 0 20120103 01001 0 20120104 01001 1 20120105 01003 1 20120106 02001 0 20120107 02001 2 20120108 02001 0 20120109 02001 1 20120110 02002 2 |

C_ID T_ID
20120102 0102
20120103 0102
20120104 0102
20120105 0103
20120106 0204
20120107 0204
20120108 0204
20120109 0103
20120110 0103
....
每一个独立 C_ID对应一个T_ID,C_ID是不重复,但T_ID可以重复。
表P_History:

C_ID M_ID P_ID
20120102 01001 0
20120103 01001 0
20120104 01001 1
20120105 01003 1
20120106 02001 0
20120107 02001 2
20120108 02001 0
20120109 02001 1
20120110 02002 2
。。。
20120102 01001 0
20120103 01001 0
20120104 01001 1
20120105 01003 1
20120106 02001 0
20120107 02001 2
20120108 02001 0
20120109 02001 1
20120110 02002 2
。。。
获得如下结果:

T_ID M_ID P_ID Count_P Count_Total Ratio
0102 01001 0 2 3 67%
0102 01001 1 1 3 33%
0102 01001 2 0 3 0%
0102 01003 0 0 0 0%
0102 01003 1 0 0 0%
0102 01003 2 0 0 0%
0103 01001 0 0 0 0%
0103 01001 1 0 0 0%
0103 01001 2 0 0 0%
0103 01003 0 0 2 0%
0103 01003 1 1 2 50%
0103 01003 2 1 2 50%
0204 02001 0 2 4 50%
0204 02001 1 1 4 25%
0204 02001 2 1 4 25%
0102 01001 0 2 3 67%
0102 01001 1 1 3 33%
0102 01001 2 0 3 0%
0102 01003 0 0 0 0%
0102 01003 1 0 0 0%
0102 01003 2 0 0 0%
0103 01001 0 0 0 0%
0103 01001 1 0 0 0%
0103 01001 2 0 0 0%
0103 01003 0 0 2 0%
0103 01003 1 1 2 50%
0103 01003 2 1 2 50%
0204 02001 0 2 4 50%
0204 02001 1 1 4 25%
0204 02001 2 1 4 25%
搜索 T_ID,M_ID的个数(Count_Total),以及T_ID,M_ID By P_ID的个数(Count_P),Ratio=(Count_P/Count_Total)*100
这个 搜索语句怎么写呢?如何获取 Count_Total呢,