3

2 つの異なるクエリの結果セットを 1 つの結果セットに結合しようとしています。おそらくWITHキーワードを使用して、ストアドプロシージャを使用せずにこれは可能ですか?

次のケースを取り上げます。

SELECT * FROM student WHERE graduation_year = 2013 -- returns 140 rows
SELECT * FROM student WHERE graduation_year = 2014 -- returns 130 rows

おそらく私の要点を説明するために、複雑な動的制約を省略しているため、ここで OR を提案するという明白な解決策は無視してください。

これらの各クエリの結果を個別に取得し、それらを 1 つの結果セットに結合したいと考えています。

4

3 に答える 3

2

UNION ALL2 つのクエリ間でa を使用できます。

SELECT *, '2013' Source
FROM student 
WHERE graduation_year = 2013 
UNION ALL
SELECT *, '2014' Source
FROM student 
WHERE graduation_year = 2014 

デモで SQL Fiddle を参照してください

行がどのデータセットから来たかを特定する必要がある場合は、source というフィールドを追加しました。これは、必要ない場合は除外できます。

一時テーブルでこれが必要な場合は、次のようなものを使用できます。

select *
into #temp
from
(
  SELECT *, '2013' Source
  FROM student 
  WHERE graduation_year = 2013 
  UNION ALL
  SELECT *, '2014' Source
  FROM student 
  WHERE graduation_year = 2014 
) src


select * from #temp

デモで SQL Fiddle を参照してください

于 2012-12-13T16:34:42.190 に答える
2

You can use the UNION ALL

SELECT *
FROM student 
WHERE graduation_year = 2013 
UNION ALL
SELECT *
FROM student 
WHERE graduation_year = 2014 
于 2012-12-13T16:35:39.560 に答える
1
SELECT * FROM student WHERE graduation_year = 2013 -- returns 140 rows
Union All -- Retrieves all results from both recordsets including both duplicates
SELECT * FROM student WHERE graduation_year = 2014 -- returns 130 rows

SELECT * FROM student WHERE graduation_year = 2013 -- returns 140 rows
Union -- Retrieves all results from both recordsets discarding duplicates
SELECT * FROM student WHERE graduation_year = 2014 -- returns 130 rows
于 2012-12-13T16:33:08.630 に答える