Используйте с. вот моя первая попытка с вашим sql
create table #temp1(_row_ord int,CID int,_data varchar(10))
insert #temp1
values
(1,1001,'text1'),
(2,1001,'text2'),
(4,1002,'text1'),
(5,1002,'text2')
create table #temp2(_row_ord int,CID int,_data varchar(10))
insert #temp2
values
(1,1001,'sample1'),
(2,1001,'sample2'),
(4,1002,'sample1'),
(5,1002,'sample2');
WITH result( _row_ord, CID,_data) AS
(
--My query
select * from #temp1
union
select * from #temp2 where CID in (select CID from #temp1)
)
select * from tmp order by CID ,_data
drop table #temp1,#temp2
результатом
_row_ord CID _data
1 1001 sample1
2 1001 sample2
1 1001 text1
2 1001 text2
4 1002 sample1
5 1002 sample2
4 1002 text1
5 1002 text2
Единственным путем я могу думать, чтобы сделать, это составляет давание функции имени:
fact = lambda x: 1 if x == 0 else x * fact(x-1)
или поочередно, для более ранних версий Python:
fact = lambda x: x == 0 and 1 or x * fact(x-1)
Обновление : с помощью идей из других ответов я смог втиснуть функцию факториала в единственную лямбду без имени:
>>> map(lambda n: (lambda f, *a: f(f, *a))(lambda rec, n: 1 if n == 0 else n*rec(rec, n-1), n), range(10))
[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
, Таким образом, это возможно, но не действительно рекомендуемое!
Вы не можете непосредственно сделать этого, потому что это не имеет никакого имени. Но с функцией помощника как Y-combinator Lemmy указал, можно создать рекурсию путем передачи функции в качестве параметра себе (как странный, поскольку это звучит):
# helper function
def recursive(f, *p, **kw):
return f(f, *p, **kw)
def fib(n):
# The rec parameter will be the lambda function itself
return recursive((lambda rec, n: rec(rec, n-1) + rec(rec, n-2) if n>1 else 1), n)
# using map since we already started to do black functional programming magic
print map(fib, range(10))
Это печатает первые десять Чисел Фибоначчи: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
,
Да. У меня есть два способа сделать это, и каждый был уже покрыт. Это - мой предпочтительный путь.
(lambda v: (lambda n: n * __import__('types').FunctionType(
__import__('inspect').stack()[0][0].f_code,
dict(__import__=__import__, dict=dict)
)(n - 1) if n > 1 else 1)(v))(5)
Я никогда не использовал Python, но это , вероятно, что Вы ищете.
Если Вы были действительно мазохистскими, Вы смогли делать это с помощью C расширения, но повторять Greg (привет Greg!), это превышает возможность лямбды (без имени, анонимный) функция.
номер (для большинства значений не).