根据第三列

时间:2016-04-30 06:38:14

标签: sql sql-server sql-server-2008 select qsqlquery

我有三列:Team_CodeIDtimes_together。 我正在尝试计算ID有多少次具有相同的“Team_Code”并向其添加times_together。 换句话说 - 我正在尝试编写一列的所有对,检查它们在其他原始中具有相同值的次数,并添加第三个原始值。

提出这个问题的简单方法是: enter image description here

编辑:我不在乎这些值是否会出现两次(例如 1110与8888 然后 8888与1110)。

2 个答案:

答案 0 :(得分:1)

您可以在team_code上自行加入表格并汇总times_together

SELECT t1.id, t2.id, SUM(t1.times_together)
FROM   mytable t1
JOIN   mytable t2 ON t1.team_code = t2.team_code AND t1.id != t2.id

如果你想确保每一对只出现一次,你可以添加一个条件来始终采用左边的较低的id:

SELECT t1.id, t2.id, SUM(t1.times_together)
FROM   mytable t1
JOIN   mytable t2 ON t1.team_code = t2.team_code AND t1.id < t2.id

答案 1 :(得分:1)

我建议这个自加入SQL,它接受所有可能的 ID 对(但只有在第一个小于第二个的情况下),并使用CASE求和 times_together 当这些人在同一个团队中比赛时:

select     t1.id,
           t2.id,
           sum(case when t1.Team_Code = t2.Team_Code 
                then t1.times_together
                else 0
           end) times_together
from       t as t1
inner join t as t2 
        on t1.id < t2.id
group by   t1.id, t2.id
order by   1, 2

示例中的输出是:

|   id |   id | times_together |
|------|------|----------------|
| 1028 | 1110 |              0 |
| 1028 | 2220 |              0 |
| 1028 | 8888 |              0 |
| 1110 | 2220 |              1 |
| 1110 | 8888 |              1 |
| 2220 | 8888 |              6 |