当前位置: 代码迷 >> Oracle管理 >> 求SQL语句。解决办法
  详细解决方案

求SQL语句。解决办法

热度:159   发布时间:2016-04-24 04:14:37.0
求SQL语句。
有两张表:

表一如下:




表二如下:




现在要求用SQL语句分别生成如下的两张表:


结果表一:要求全部是内部单位的,排序按照表一中的排序号来排序,注意小计有横向和纵向的:




结果表二:要求是所有单位的,也就是内部单位+外部单位,排序按照表一中的排序号来排序,注意小计有横向和纵向的:




请赐教,谢谢!
------解决方案--------------------
SELECT nvl(责任单位,'小计') 责任单位,
sum(decode(故障,'故障A',1)) 故障A,
sum(decode(故障,'故障B',1)) 故障B,
sum(decode(故障,'故障C',1)) 故障C,
count(1) 小计
FROM 表二
where 责任单位 in (select 责任单位 from 表1 where 是否内部='是')
GROUP BY rollup(责任单位)

第二个把where条件去掉即可
SELECT nvl(责任单位,'小计') 责任单位,
sum(decode(故障,'故障A',1)) 故障A,
sum(decode(故障,'故障B',1)) 故障B,
sum(decode(故障,'故障C',1)) 故障C,
count(1) 小计
FROM 表二
GROUP BY rollup(责任单位)

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

小改动:
with t1 as
 (select 1 num, 'Y' Y_N, 'IN01' NM
    from dual
  UNION ALL
  select 2 num, 'Y' Y_N, 'IN02' NM
    from dual
  UNION ALL
  select 3 num, 'N' Y_N, 'OUT01' NM
    from dual
  UNION ALL
  select 4 num, 'N' Y_N, 'OUT02' NM
    from dual),
t2 as
 (select 'IN02' NM, 'C' ERR
    from dual
  union all
  select 'OUT01' NM, 'A' ERR
    from dual
  union all
  select 'IN01' NM, 'B' ERR
    from dual
  union all
  select 'IN01' NM, 'C' ERR
    from dual
  union all
  select 'OUT02' NM, 'A' ERR
    from dual)
select *
  from (select NM zerendanwei,
               A guzhangA,
               B guzhangB,
               C guzhangC,
               A + B + C xiaoji
          from (SELECT t1.nm, ERR
                  FROM T1, T2
                 WHERE T1.NM = T2.NM
                   AND T1.Y_N = 'Y') pivot(COUNT(ERR) for(ERR) in('A' AS A,
                                                                  'B' AS B,
                                                                  'C' AS C))
         order by nm)
UNION ALL
select 'XIAOJI', SUM(A), SUM(B), SUM(C), SUM(A + B + C)
  from (SELECT t1.nm, ERR
          FROM T1, T2
         WHERE T1.NM = T2.NM
           AND T1.Y_N = 'Y') pivot(COUNT(ERR) for(ERR) in('A' AS A,
                                                          'B' AS B,
                                                          'C' AS C));
  相关解决方案