0

すべての行を 2 回返すクエリが必要です。ユニオンを使用することはできません (インデックス付きビューになる必要があるため)。

誰でもそれを行う方法を知っていますか?

(だからこれは私にはできません:)

select * from tags
union all
select * from tags
4

5 に答える 5

2

別のテーブルを作成する準備ができている場合は、次のようにして問題を解決できます。

create table duplicator (id int)
insert into duplicator values (1),(2)
go
create view dups with schemabinding 
as
   select tags.column1, tags.column2, ... , duplicator.id
     from dbo.tags
    cross join dbo.duplicator
go
create unique clustered index ix_dups on dups(tags.PK, id)
于 2012-07-25T14:00:01.867 に答える
0
select row_number() over (order by columnnamehere), *
from
(
select * from tags 
union all
select * From tags 
) a
于 2012-07-25T15:11:55.863 に答える
0

複製する行数を保持するテーブルを作成し、それに対してクロス結合を実行できます。

DECLARE @tblOrig table (PK int, fruitName varchar(20));
insert @tblOrig values (1, 'Apple');
insert @tblOrig values (2, 'Banana');
insert @tblOrig values (3, 'Pear');

DECLARE @tblDup table (DuplicateNumber int);
insert @tblDup values (1);
insert @tblDup values (2);

select t1.*
from @tblOrig t1
cross join @tblDup
于 2012-07-25T14:08:15.537 に答える
0
with temp(idx) as (
    select 1 as idx union select 2 as idx
)
select * from yourtable cross join temp
于 2012-07-25T13:58:43.287 に答える
0

ユニオン (または CTE、それ自体へのクロス結合など) を使用してインデックス付きビューを作成することはできません。しかし、次のようなこともできます (列名と主キーについて仮定しています):

CREATE VIEW dbo.TagsView1
WITH SCHEMABINDING
AS
   SELECT col1, col2 FROM dbo.tags;
GO
CREATE UNIQUE CLUSTERED INDEX x ON dbo.TagsView(col1);

それに対してユニオンを実行するビューを作成します。

CREATE VIEW dbo.TagsView2
AS
   SELECT col1, col2 FROM dbo.TagsView1
   UNION ALL
   SELECT col1, col2 FROM dbo.TagsView1;
GO

これはあなたの要件をある程度満たしていますが、それでも要件が疑わしいと思います。これがインデックス付きビューであるべきだと思う理由を正確に説明できない限り。答えが「速くなるから」である場合、答えは間違っています。

于 2012-07-25T14:01:49.197 に答える