这是我想要的伪代码。我需要在以下声明中计算拳头工会的数量。
SELECT *
FROM Table1
UNION
SELECT Cats.Id + (SELECT COUNT(*) FROM Fist_Union_Result),
Cats.Name
FROM Table2
任何想法 ?
这是我想要的伪代码。我需要在以下声明中计算拳头工会的数量。
SELECT *
FROM Table1
UNION
SELECT Cats.Id + (SELECT COUNT(*) FROM Fist_Union_Result),
Cats.Name
FROM Table2
任何想法 ?
假设第一部分是一个复杂的查询,您可以使用该with
子句为其设置别名。这允许您在两个地方使用它,联合的顶部和您计算的地方:
; with FirstPart as
(
select *
from Table1
)
select *
from FirstPart
union all
select cats.Id - cnt.cnt
, cats.Name
from Table2 cats
cross join
(
select count(*) as cnt
from FistPart
) as cnt
如果您只想要一个唯一的 ID,您可以将其union
放在子查询中并标记行 1..N:
select row_number() over (order by Name) as Id
, Name
from (
select Name
from Table1
union all
select Name
from Table2
) as SubQueryAlias
像这样的东西:
with first_union_result as (
select col1,
col2
from table1
), count_from_first as (
select count(*) as first_count
from first_union_result
)
select col1,
col2
from first_union_result
union all
select cats.id + cnt.first_count,
cats.name
from cats
cross join count_from_first as cnt;
如果您试图在整体结果中获得一些唯一的 id 或类似的东西,您最好使用row_number()
为所有行生成它。