返回求和列的所有排列的SQL

返回求和列的所有排列的SQL,sql,sql-server,Sql,Sql Server,这是在黑暗中拍摄的。我个人很难想出一个简单的SQL语句来完成以下任务,如果可以的话,所以我想我应该在这里抛开它: 假设我们有以下数据: ID VALUE -- ----- 1 60 2 60 3 60 4 60 我想找到总数为120的所有排列记录。也就是说,结果将是6行: 1 AND 2 1 AND 3 1 AND 4 --2 AND 1 (already used) 2 AND 3 2 AND 4 --3 AND 1 (already used) --3 AND 2 (already

这是在黑暗中拍摄的。我个人很难想出一个简单的SQL语句来完成以下任务,如果可以的话,所以我想我应该在这里抛开它:

假设我们有以下数据:

ID VALUE
-- -----
1  60
2  60
3  60
4  60
我想找到总数为120的所有排列记录。也就是说,结果将是6行:

1 AND 2
1 AND 3
1 AND 4
--2 AND 1 (already used)
2 AND 3
2 AND 4
--3 AND 1 (already used)
--3 AND 2 (already used)
3 AND 4
他们实际上想要对结果集进行随机抽样,但我需要知道我是否能得到结果集。当然,真正的数据并不是那么容易,问题是10条记录加起来有5分钟。这个字段是一个持续时间字段,这导致了关于如何处理它的其他问题,但让我看看我是否可以在实际变得更复杂之前先从排列开始


谢谢。

这些是组合,不是排列。如果需要所有双向组合,请使用自连接:

select l.id, r.id, l.value+r.value as sum
from t l
  inner join t r
    on l.id < r.id
where l.value+r.value = 120
order by l.id, r.id
select t1.*, t2.*
from t t1 join
     t t2
     on t1.id < t2.id and
        t1.value + t2.value = 60;
对于约10%的随机样本,您可以使用:

select t1.*, t2.*
from t t1 join
     t t2
     on t1.id < t2.id and
        t1.value + t2.value = 60
where rand() < 0.1;

这些是组合,而不是排列。如果需要所有双向组合,请使用自连接:

select t1.*, t2.*
from t t1 join
     t t2
     on t1.id < t2.id and
        t1.value + t2.value = 60;
对于约10%的随机样本,您可以使用:

select t1.*, t2.*
from t t1 join
     t t2
     on t1.id < t2.id and
        t1.value + t2.value = 60
where rand() < 0.1;
表T值

ID VALUE
-- -----
1  60
2  60
3  60
4  60

Select A.ID, B.ID from TValues A
join TValues B on B.ID != A.ID
where
    (A.Value+B.Value) = 120
  and
    A.ID < B.ID  -- eliminates dups, if (1,3) is printed, (3,1 will not be printed)
表T值

ID VALUE
-- -----
1  60
2  60
3  60
4  60

Select A.ID, B.ID from TValues A
join TValues B on B.ID != A.ID
where
    (A.Value+B.Value) = 120
  and
    A.ID < B.ID  -- eliminates dups, if (1,3) is printed, (3,1 will not be printed)


看来我问题的第一部分很容易解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分!看来我问题的第一部分很容易解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分!看来我问题的第一部分很容易解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分@仅仅看10个方向的组合是一个完全不同的问题。你应该为此发布一个新问题。是的,我正在考虑。嗯,看起来我问题的第一部分可以很容易地解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分@仅仅看10个方向的组合是一个完全不同的问题。你应该为此发布一个新问题。是的,我正在考虑。嗯,看起来我问题的第一部分可以很容易地解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分!看来我问题的第一部分很容易解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分!你的数据库管理系统是什么?关系型的?你的数据库管理系统是什么?关系数据库?SQL Server。