web-dev-qa-db-ja.com

SQLクエリ結果に列を追加する

SSRSでレポートをまとめています。データセットには、MS SQLサーバーのSQLクエリが入力されます。 Union Allを使用して、いくつかの同様のテーブルを照会しています。問題は、情報の損失があることです。異なるテーブルは異なる作業サイト用ですが、これらのテーブルの列にはサイトの名前がありません。サイトを識別する唯一の方法は、テーブル名によるものです。 Union Allの結果である結合された列では、どの行がどのサイトから来たかを知る方法がありません。

クエリを変更して結果に列を追加する方法はありますか?これには、各行が関連付けられているワークサイトがありますか?読み取り専用の権限があるため、これを元のテーブルに追加することはできません。私はこのようなことを考えていましたが、どのような種類の表現を使用するのか、それを行うことができるかどうかはわかりません:

SELECT t1.column, t1.column2
FROM t1
<some expression>
UNION ALL
SELECT t2.column, t2.column2
FROM t2
<some expression>
UNION ALL
...

など。式は列を「追加」し、クエリの各部分に関連付けられたサイト名を追加します。これまたは他の何かがサイト名を取得するために機能しますか?

14
Ben C.

クエリを作成するときに手動で追加します。

SELECT 'Site1' AS SiteName, t1.column, t1.column2
FROM t1

UNION ALL
SELECT 'Site2' AS SiteName, t2.column, t2.column2
FROM t2

UNION ALL
...

例:

DECLARE @t1 TABLE (column1 int, column2 nvarchar(1))
DECLARE @t2 TABLE (column1 int, column2 nvarchar(1))

INSERT INTO @t1
SELECT 1, 'a'
UNION SELECT 2, 'b'

INSERT INTO @t2
SELECT 3, 'c'
UNION SELECT 4, 'd'


SELECT 'Site1' AS SiteName, t1.column1, t1.column2
FROM @t1 t1

UNION ALL
SELECT 'Site2' AS SiteName, t2.column1, t2.column2
FROM @t2 t2

結果:

SiteName  column1  column2
Site1       1      a
Site1       2      b
Site2       3      c
Site2       4      d
18
Khan

次のような静的な値を持つ「ソース」列を各クエリに追加しないのはなぜですか

select 'source 1' as Source, column1, column2...
from table1

UNION ALL

select 'source 2' as Source, column1, column2...
from table2
5
Diego