我们有一个这样的表:
id mid mult tr result
----------------------------
1 1 1,35 0 1
2 1 5,85 0 2
3 1 4 1 X
50 2 1,3 1 1
51 2 7 0 2
52 2 4 0 X
99 3 2,45 0 1
100 3 2,2 0 2
101 3 3,3 1 X
105 4 2,3 0 1
106 4 2,4 0 2
107 4 3,2 1 X
111 5 3 1 1
112 5 1,9 0 2
113 5 3,25 0 X
我们需要的是一个查询,它将为我们提供一个表,该表将计算特定中间(匹配)之前多少次具有相同的结果(乘数),结果= 1且结果= x已发生并且组它们以便我们可以数数。像
这样的东西select mult(where result = 1), mult(where result = x), count(1)
结果将是这样的
mult_1 mult_x count
------------------------------
1,35 4 33
1,3 4 112
以上说明我们已经看到33次匹配,其中结果= 1的多数为1,35,而结果= x的多数为4.此外,我们发现112匹配,其中结果= 1的多数为1,3 AND result = x mult为4(结果不依赖于第一个表)。
我发现自己相当复杂,但希望我有道理。我使用SQL Server 2008,所以任何方法都非常受欢迎。
答案 0 :(得分:2)
以下是我的(最终)解决方案:http://www.sqlfiddle.com/#!3/3a516/7
我在这里做了很多假设。
mid
值的result
值最多为'1'
,'2'
的结果为1 mid
。 mid
的数据。
mid
之前包含每个mid
(或匹配)。
DECLARE @Mid INT = 2
;WITH MatchResults AS
(
SELECT
Mid
, [1] AS MultWithResult1
, [X] AS MultWithResultX
FROM
(
SELECT
Mid
, mult
, result
FROM Matches
WHERE result IN ('1', 'X')
) Base
PIVOT
(
MAX(mult)
FOR result
IN
(
[1]
, [X]
)
) Pivoted
)
SELECT
mult.MultWithResult1 AS mult_1
, mult.MultWithResultX AS mult_x
, COUNT(*) AS [count]
FROM MatchResults mult
GROUP BY mult.MultWithResult1
, mult.MultWithResultX
)之后。
如果所有这些假设听起来都合适,那么这可能会产生您正在寻找的结果:
{{1}}编辑:我根据对我认为他的意思的答案的回答编辑了它。
答案 1 :(得分:1)
使用此查询:
select mult_1, mult_x, count() as count
from Matches M
inner join (select distinct M1.mult as mult_1, MX.mult as mult_x from
matches as M1, matches as MX
where M1.result=1 and MX.result=x) M1x
on (M.mult=M1x.mult_1 and M.result=1) or (M.mult=M1x.mult_x and result=x)
group by mult_1, mult_x
编辑: 我想你想知道所有可能的匹配乘数组合的计数结果= 1并且匹配结果= x。
如果是这种情况,M1x会提供所有这些可能的组合。并且你加入所有可能的matchea并且有任何这些组合,并计算它们,按照M1x定义的可能的组合分组。