15

これは私の見解です:

Create View [MyView] as
(
Select col1, col2, col3 From Table1
UnionAll
Select col1, col2, col3 From Table2
)

名前付きの新しい列を追加するId必要があり、この列を一意にする必要があるため、新しい列をIDとして追加すると思います。このビューが大量のデータを返したことに言及しなければならないので、パフォーマンスの良い方法が必要です。また、2 つの選択クエリをユニオンで使用します。

4

5 に答える 5

31

ROW_NUMBER()SQL Server 2008 で関数を使用します。

Create View [MyView] as

SELECT ROW_NUMBER() OVER( ORDER BY col1 ) AS id, col1, col2, col3
FROM(
    Select col1, col2, col3 From Table1
    Union All
    Select col1, col2, col3 From Table2 ) AS MyResults
GO
于 2012-04-30T10:42:19.423 に答える
3

ビューは、データ自体を含まない単なる保存されたクエリであるため、安定した ID を追加できます。たとえば、ページングなどの他の目的で ID が必要な場合は、次のようにすることができます。

create view MyView as 
(
    select row_number() over ( order by col1) as ID, col1 from  (
        Select col1 From Table1
        Union All
        Select col1 From Table2
    ) a
)
于 2012-04-30T10:45:05.830 に答える
2

次の条件が当てはまらない限り、ROW_NUMBER()を使用したクエリによって返される行が、実行ごとにまったく同じ順序になるという保証はありません。

  1. パーティション化された列の値は一意です。[上司に3人の従業員がいるように、パーティションは親子です][無視]
  2. ORDERBY列の値は一意です。[列1が一意の場合、row_numberは安定している必要があります]
  3. パーティション列とORDERBY列の値の組み合わせは一意です。[一意にするために注文に10列が必要な場合は、row_numberを安定させるために使用してください]」

ここには二次的な問題があり、これは見解です。Order Byは、ビューで常に機能するとは限りません(長年のSQLバグ)。row_number()を1秒間無視します:

create view MyView as 
(
    select top 10000000 [or top 99.9999999 Percent] col1 
    from  (
        Select col1 From Table1
        Union All
        Select col1 From Table2
    ) a order by col1
)
于 2013-03-14T04:19:23.533 に答える