Добавление столбца в результаты SQL-запроса
Я собираю отчет в SSRS. Набор данных заполняется SQL-запросом сервера MS 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
...
и т.д.. Выражение "добавит" столбец, который добавит имя сайта, связанное с каждой частью запроса. Может ли это или что-то еще работать, чтобы получить имя сайта?
Ответы
Ответ 1
Вручную добавьте его при создании запроса:
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
Ответ 2
почему вы не добавляете столбец "source" к каждому из запросов со статическим значением, например
select 'source 1' as Source, column1, column2...
from table1
UNION ALL
select 'source 2' as Source, column1, column2...
from table2