1

これが私が欲しい擬似コードです。次のステートメントで拳の組合の数を取得する必要があります。

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

何か案が ?

4

2 に答える 2

1

最初の部分が複雑なクエリであると仮定すると、with句を使用してエイリアスを作成できます。それはあなたが2つの場所でそれを使うことを可能にします、組合の上部とあなたが数える場所:

; 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;

row_number()全体的な結果に一意のIDなどを取得しようとしている場合は、すべての行に対してそれを生成するために使用する方がよい場合があります。

于 2012-10-28T13:34:29.707 に答える