问题 将列添加到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
...

表达式将“添加”一列,该列将添加与查询的每个部分关联的站点名称。这个或其他什么方法可以获得网站名称?


9717
2017-07-26 13:43


起源



答案:


在构建查询时手动添加它:

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

12
2017-07-26 13:45



我刚才尝试过,但它没有奏效。它将“Site1”添加为列名,将“SiteName”添加为别名。 - Ben C.
它不应该。在上面的查询中,SiteName应该是新的列名,其中的值应为“Site1”或“Site2”,具体取决于它来自哪个查询。 - Khan
试试没有别名?选择'Site1',t1.column等... - Eric Hauenstein
@JefferyKhan我把它拿回来了。它在查询设计器中看起来并不正确,但是,当我预览报表时,它工作得很好。谢谢! - Ben C.
很好..它解决了我的问题 - Casperon


答案:


在构建查询时手动添加它:

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

12
2017-07-26 13:45



我刚才尝试过,但它没有奏效。它将“Site1”添加为列名,将“SiteName”添加为别名。 - Ben C.
它不应该。在上面的查询中,SiteName应该是新的列名,其中的值应为“Site1”或“Site2”,具体取决于它来自哪个查询。 - Khan
试试没有别名?选择'Site1',t1.column等... - Eric Hauenstein
@JefferyKhan我把它拿回来了。它在查询设计器中看起来并不正确,但是,当我预览报表时,它工作得很好。谢谢! - Ben C.
很好..它解决了我的问题 - Casperon


为什么不为每个具有静态值的查询添加“源”列

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

UNION ALL

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

3
2017-07-26 13:48