22

我正在 SSRS 中整理一份报告。数据集由 MS SQL 服务器的 SQL 查询填充。它使用 Union All 查询几个类似的表。问题是有一些信息丢失。不同的表格用于不同的工作地点,但这些表格中的列都没有网站的名称;识别站点的唯一方法是通过表名。在联合所有结果的组合列中,无法分辨哪些行来自哪个站点。

有没有办法改变我的查询以在结果中添加一列,该列将具有与每行关联的工作站点?我无法将其添加到原始表中,因为我具有只读权限。我想过这样的事情,但我不知道要使用哪种表达方式,或者是否可以做到:

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

等。该表达式将“添加”一列,该列将添加与查询的每个部分相关联的站点名称。这个或其他任何东西都可以用来获取站点名称吗?

4

2 回答 2

35

构建查询时手动添加:

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
于 2013-07-26T13:45:36.953 回答
6

为什么不使用静态值向每个查询添加“源”列,例如

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

UNION ALL

select 'source 2' as Source, column1, column2...
from table2
于 2013-07-26T13:48:02.507 回答