【问题标题】:Add column to SQL query results将列添加到 SQL 查询结果
【发布时间】:2015-06-25 17:42:43
【问题描述】:

我正在 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
...

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

【问题讨论】:

    标签: sql sql-server ssrs-2008


    【解决方案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
    

    【讨论】:

    • 我刚才试过了,但效果不太好。它将“Site1”添加为列名,将 SiteName 添加为别名。
    • 不应该。在上面的查询中,SiteName 应该是新的列名,其中的值应该是“Site1”或“Site2”,具体取决于它来自哪个查询。
    • @JefferyKhan 我收回了。它在查询设计器中看起来不正确,但是,当我预览报表时,它运行良好。谢谢!
    【解决方案2】:

    为什么不为每个查询添加一个“源”列,其中包含一个静态值,例如

    select 'source 1' as Source, column1, column2...
    from table1
    
    UNION ALL
    
    select 'source 2' as Source, column1, column2...
    from table2
    

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 2021-07-23
      • 2017-02-07
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 2013-12-12
      相关资源
      最近更新 更多