Да, вы можете использовать angular.forEach
для достижения этого.
Вот пример (если objects
- массив):
// Define the initial promise
var sequence = $q.defer();
sequence.resolve();
sequence = sequence.promise;
angular.forEach(objects, function(val,key){
sequence = sequence.then(function() {
return doSomething(val);
});
});
как это можно сделать, используя array.reduce
, как и ответ @ friend00 (если objects
- массив):
objects.reduce(function(p, val) {
// The initial promise object
if(p.then === undefined) {
p.resolve();
p = p.promise;
}
return p.then(function() {
return doSomething(val);
});
}, $q.defer());
Принимая хотя бы SQL 2005 для CTE :
;with cteAllColumns as (
select col1 as col
from YourTable
union
select col2 as col
from YourTable
)
select c1.col, c2.col
from cteAllColumns c1
cross join cteAllColumns c2
where c1.col < c2.col
order by c1.col, c2.col
Вы можете присоединить к ней декартову таблицу, которая будет возвращать все комбинации обоих столбцов.
select
distinct
t1.Col1,
t2.Col2
from
MyTable t1,
MyTable t2
Вы можете сделать сам кросс-соединение ...
SELECT a.Col1, b.Col2
FROM MyTable a
CROSS JOIN MyTable b
Я искал что-то, что могло бы сделать это с использованием только SQL, доступного для Microsoft Access 2016. В итоге я понял, что другие могут найти полезным. Этот код использует CROSS JOIN, поэтому я обнаружил, что необходимо разделить два столбца на две отдельные таблицы (каждая с одним столбцом). Оператор AND заставляет один столбец быть меньше другого, тем самым исключая повторяющиеся вхождения 1-2, 2-1.
SELECT DISTINCT Table1.Column1, Table2.Column1
FROM Table1, Table2
WHERE Table1.Column1 <> Table2.Column1
AND Table2.Column1 < Table1.Column1;
Я думаю, что это было слишком сложно!
Просто:
SELECT distinct Col1, Col2
FROM MyTable
, чтобы получить все возможные комбинации.
Это использует 2 cte, первый просто воспроизводит вашу входную таблицу, второй превращает оба столбца в один столбец. Окончательный выбор кросс-соединения это набор для себя, чтобы произвести требуемый результат
with t(c1,c2)
AS
(
select 1,2
union select 1,4
union select 1,5
)
,t2(c)
as
(
select c1 from t
union select c2 from t
)
select t2_1.c, t2_2.c
from t2 t2_1
cross join t2 t2_2
where t2_1.c<t2_2.c
order by t2_1.c
Я нахожу внутреннее соединение более интуитивным, потому что я использую его чаще, чем перекрестное соединение:
;with cteAllColumns as (
select col1 as col
from YourTable
union
select col2 as col
from YourTable
)
select c1.col, c2.col
from cteAllColumns c1
join cteAllColumns c2 on 1=1
where c1.col < c2.col
order by c1.col, c2.col
Облегчение ответа Джо.
declare @t1 table (col1 varchar(5))
insert @t1
select 'A' UNION
select 'B' UNION
select 'C'
declare @t2 table (col2 varchar(5))
insert @t2
select '1' UNION
select '2' UNION
select '3'
;with cteAllColumns as (
select col1 as col
from @t1
union
select col2 as col
from @t2
)
select c1.col, c2.col
from cteAllColumns c1
cross join cteAllColumns c2
where c1.col < c2.col
order by c1.col, c2.col
. Проверьте свои комбинации. Кол-во (Кол-во строк) ]