在SQL中将列添加到另一个表中

在SQL中将列添加到另一个表中,sql,sql-server,Sql,Sql Server,我有一个由三个数字组成的表格,它们是其他数字的百分比差异 我使用的查询如下所示: select abs((((select avg(Number) from Table1 where File='File1') - (select avg(Number) from Table1 where File='File2')) / (select avg(Number) from Table1 where File='File2'))*100) union all select ab

我有一个由三个数字组成的表格,它们是其他数字的百分比差异

我使用的查询如下所示:

select abs((((select avg(Number) from Table1 where File='File1') - 
    (select avg(Number) from Table1 where File='File2')) / 
    (select avg(Number) from Table1 where File='File2'))*100)
union all
select abs((((select avg(Number) from Table1 where File='File3') - 
    (select avg(Number) from Table1 where File='File4')) / 
    (select avg(Number) from Table1 where File='File4'))*100)
union all
select abs((((select avg(Number) from Table1 where File='File5') - 
    (select avg(Number) from Table1 where File='File6')) / 
    (select avg(Number) from Table1 where File='File6'))*100)
这将生成如下表:

| (No column name) |
|:----------------:|
|             1.54 |
|             1.15 |
|             2.04 |
这些数字是来自三个文件的一类数据的百分比差异。这些文件名位于
Table1
中的
Column1
。如何编写此查询,使表看起来像这样?(将文件名添加到这些数字左侧的一列中)


只需将文件名添加到查询:

select FileName='File1', PCT_DIFF=abs((((select avg(Number) from Table1 where File='File1') - 
    (select avg(Number) from Table1 where File='File2')) / 
    (select avg(Number) from Table1 where File='File2'))*100)
union all
select 'File3', abs((((select avg(Number) from Table1 where File='File3') - 
    (select avg(Number) from Table1 where File='File4')) / 
    (select avg(Number) from Table1 where File='File4'))*100)
union all
select 'File5', abs((((select avg(Number) from Table1 where File='File5') - 
    (select avg(Number) from Table1 where File='File6')) / 
    (select avg(Number) from Table1 where File='File6'))*100)
简化查询

select file,
       100 * (prev_avg - avg) / avg as percent_diff
from (select file, avg(Number) as avg,
             lag(avg(Number)) over (order by file) as prev_avg
      from table1
      where file in ('File1', 'File2', 'File3', 'File4', 'File5', 'File6')
      group by file
     ) t
where file in ('File2', 'File4', 'File6');
这假定文件是按名称排序的。如果以其他方式订购,例如按日期或大小,则If应该易于修改


这也很容易推广到其他行。

将列1添加到每个查询并按列1分组?我是个傻瓜。我以前做过这个。我不知道为什么我没有想到这一点。谢谢你解开我的大脑。
select file,
       100 * (prev_avg - avg) / avg as percent_diff
from (select file, avg(Number) as avg,
             lag(avg(Number)) over (order by file) as prev_avg
      from table1
      where file in ('File1', 'File2', 'File3', 'File4', 'File5', 'File6')
      group by file
     ) t
where file in ('File2', 'File4', 'File6');