1

这是我想要的伪代码。我需要在以下声明中计算拳头工会的数量。

SELECT *  
FROM Table1 
UNION 
SELECT Cats.Id + (SELECT COUNT(*) FROM Fist_Union_Result), 
       Cats.Name 
FROM Table2

任何想法 ?

4

2 回答 2

1

假设第一部分是一个复杂的查询,您可以使用该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
于 2012-10-28T13:34:55.483 回答
0

像这样的东西:

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()为所有行生成它。

于 2012-10-28T13:34:29.707 回答