首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL语句归并多条select avg(XXX).group by.查询结果到一张表

2014-01-03 
SQL语句合并多条select avg(XXX)...group by...查询结果到一张表多个表查询结果合并结果为:求教各位大大,

SQL语句合并多条select avg(XXX)...group by...查询结果到一张表





多个表查询结果合并结果为:
SQL语句归并多条select avg(XXX).group by.查询结果到一张表

求教各位大大,结果用SQL语句如何实现?

[解决办法]
SELECT  品号 ,
        SUM(采购进货数) 采购进货数 ,
        SUM(采购退货数) 采购退货数 ,
        SUM(采购退货数) - SUM(采购退货数) AS [现存数] ,
        单位 ,
        日期
FROM    ( SELECT    TH004 AS 品号 ,
                    0 AS 采购退货数 ,
                    AVG(TH015) AS 采购进货数 ,
                    TH008 AS 单位 ,
                    TG003 AS 日期
          FROM      PURTH
                    LEFT JOIN PURTG ON TG001 = TH001
                                       AND TG002 = TH002
          WHERE     TH030 = 'Y'
                    AND TH015 <> 0
          GROUP BY  TH004 ,
                    TG003 ,
                    TH008
          UNION ALL
          SELECT    TJ004 AS 品号 ,
                    AVG(TJ009) AS 采购退货数 ,
                    0 AS 采购进货数 ,
                    TJ007 AS 单位 ,
                    TI003 AS 日期
          FROM      PURTJ
                    LEFT JOIN PURTI ON TJ001 = TI001
                                       AND TJ002 = TI002
          WHERE     TJ020 = 'Y'
                    AND TJ009 <> 0


          GROUP BY  TJ004 ,
                    TI003 ,
                    TJ007
        ) a
GROUP BY 品号 ,
        单位 ,
        日期


[解决办法]
引用:
Quote: 引用:

这个之前也想到了,如果你的查询可以用临时表的话,那么写起来就方便一点:

if OBJECT_ID('tempdb..#a') is not null
   drop table #a
   
if OBJECT_ID('tempdb..#b') is not null
   drop table #b

select 
    TH004 as 品号,
    avg(TH015) as 采购进货数,
    TH008 as 单位,
    TG003 as 日期 
    into #a
from PURTH left join PURTG 
on TG001=TH001 and TG002=TH002 
where TH030='Y' and TH015<>0 
group by 
    TH004,TG003,TH008

  
select 
    TJ004 as 品号,
    avg(TJ009) as 采购退货数,
    TJ007 as 单位,
    TI003 as 日期 
    into #b
from PURTJ left join PURTI 
on TJ001=TI001 and TJ002=TI002 
where TJ020='Y' and TJ009<>0
group by 
    TJ004,TI003,TJ007



select t.品号,a.采购进货数,b.采购退货数,
       isnull(a.采购进货数,0)-isnull(b.采购退货数,0)  as 现存数,
       t.单位, 
       t.日期
from 
(
select 品号,日期,单位 from #a 
union 
select 品号,日期,单位 from #b 
)t
left join #a a
       on a.品号 = t.品号 and a.日期 = t.日期 and a.单位 = t.单位 
left join #b b
       on b.品号 = t.品号 and b.日期 = t.日期 and b.单位 = t.单位 
 


如果将结果存存到视图中,临时表不能存在于视图中?


你的这个查询是试图对吧,试试这个呢:
select t.品号,a.采购进货数,b.采购退货数,
       isnull(a.采购进货数,0)-isnull(b.采购退货数,0)  as 现存数,
       t.单位, 
       t.日期
from 
(
select 品号,日期,单位 
from 
(
select 
TH004 as 品号,
avg(TH015) as 采购进货数,
TH008 as 单位,
TG003 as 日期 
from PURTH left join PURTG 
on TG001=TH001 and TG002=TH002 
where TH030='Y' and TH015<>0 
group by 
TH004,TG003,TH008
)a
 
union 

select 品号,日期,单位 
from 
(
select 
TJ004 as 品号,
avg(TJ009) as 采购退货数,
TJ007 as 单位,
TI003 as 日期 
into #b
from PURTJ left join PURTI 
on TJ001=TI001 and TJ002=TI002 
where TJ020='Y' and TJ009<>0
group by 
TJ004,TI003,TJ007
)b
 
)t
left join 
(
select 
TH004 as 品号,
avg(TH015) as 采购进货数,
TH008 as 单位,
TG003 as 日期 
from PURTH left join PURTG 
on TG001=TH001 and TG002=TH002 
where TH030='Y' and TH015<>0 
group by 
TH004,TG003,TH008
) a
  on a.品号 = t.品号 and a.日期 = t.日期 and a.单位 = t.单位 
left join 
(
select 
TJ004 as 品号,
avg(TJ009) as 采购退货数,
TJ007 as 单位,
TI003 as 日期 
into #b
from PURTJ left join PURTI 
on TJ001=TI001 and TJ002=TI002 
where TJ020='Y' and TJ009<>0
group by 
TJ004,TI003,TJ007
) b
  on b.品号 = t.品号 and b.日期 = t.日期 and b.单位 = t.单位 
 

热点排行