1

アプリケーションの他の部分から提供される複雑なクエリがあり、定数列を追加して、さらに処理するためにクエリを渡す必要があります (SSRS ServerReport)。クエリは、 で接続された複数のクエリで構成されUNION ALL、 を含むことができますORDER BY

編集:解析せずにタイトルに含まれるものを強調するのを忘れています。クエリ(条件、サブクエリ)について何も知らないので、解析して変更するのはかなり危険です。

例:

declare @t table(id int)
insert into @t values(1)
insert into @t values(2) 

クエリ:

(select  id from @t where id=1
union all
select  id from @t where id=2) order by id desc

必要な出力:

id | Par
----------
2  | Hello   
1  | Hello

試行 (ORDER BY では機能しません):

SELECT *, 'Hello' Par from
((select  id from @t where id=1
    union all
    select  id from @t where id=2) order by id desc) tbl

ソリューションは、SQL Server 2008 以降で動作する必要があります。

4

6 に答える 6

1
select tbl.id,
    'Hello' Par
from (
    select id
    from @t
    where id = 1

    union all

    select id
    from @t
    where id = 2
 ) tbl
order by tbl.id desc

私はあなたがあなたの例とは異なるクエリをUNIONしていると仮定します、さもなければあなたはただするでしょう:

select id,      
   'Hello' Par
from @t
where id in (1, 2)
order by id desc
于 2012-04-23T14:12:57.423 に答える
1

これは、クエリに挿入する (または @satcat66 の回答のような冗長な動的 SQL を作成する) ことなく修正することはできません。ユニオンを含むサブクエリには、それを定義するためのエイリアスが必要です。たとえば、where id=2) AS alias ORDER BY id DESC)...この壊れた構文を機能させる魔法はありません。

于 2012-04-23T15:03:20.997 に答える
0

クエリに少し問題があります

SELECT *, 'Hello' Par from
(select  id from @t where id=1
    union all
    select  id from @t where id=2) tbl order by id desc
于 2012-04-23T14:22:38.097 に答える
0
declare @t table(id int)
insert into @t values(1)
insert into @t values(2) 

;WITH cte AS(
    SELECT id, 'Hello' Par
     FROM @t t1 WHERE t1.id=1

    UNION ALL

    SELECT id, 'Hello' Par
    FROM @t t2 WHERE t2.id=2
)
SELECT * FROM cte
ORDER BY id DESC

WITH common_table_expression

于 2012-04-23T14:14:07.097 に答える
0

列の名前と型を事前に知っていると仮定すると、

DECLARE @query nvarchar(max);
SET @query = '

declare @t table(id int);
insert into @t values(1);
insert into @t values(2); 
(select  id from @t where id=1
    union all
    select  id from @t where id=2) order by id desc';

 CREATE TABLE #T ( ind int IDENTITY(1,1) NOT NULL, id int );
 INSERT INTO #T (id)
 exec sp_executesql @query;

 SELECT ID, 'Hello' AS Par FROM #T ORDER BY ind;
于 2012-04-23T15:02:16.220 に答える
0

CTEの使用はどうですか:

declare @t table(id int)
insert into @t values(1)
insert into @t values(2) 
;
with my_cte as (
    select  id from @t where id=1
    union all
    select  id from @t where id=2
)
select *, 'Hello'
from my_cte
order by id

編集: この場合、メイン クエリの結果を一時テーブルに挿入できます。それは順序を尊重します:

create table #temptable(
id int
)

declare @t table(id int)
insert into @t values(1)
insert into @t values(2) 

insert into #temptable
select  id from @t where id=1
union all
select  id from @t where id=2
order by id desc

select *, 'Hello' from #temptable

結果:

2   Hello
1   Hello
于 2012-04-23T14:18:16.110 に答える