来自4个不同表的数据透视表

时间:2019-01-20 10:40:55

标签: sql tsql

我有四个表,每个表有2列,其中一个列名为通用“工作流” tb1

Workflow    |   progress
-----------------------
export data |   3

t2

Workflow    |   closed
----------------------
import data |    4

t3

Workflow    |   Finished
----------------------
extra data  |   2

t4

Workflow    |   notyet
----------------------
Oracle tags |   7

现在我正在寻找如下结果,

Workflow   |  Progress   | Closed  |  Finished   |  notyet  |
-------------------------------------------------------------
export data |  3         | 0       |  0          |  0       |
-------------------------------------------------------------
import data |  0         | 4       |  0          |  0       |
-------------------------------------------------------------
extra data  |  0         | 0       |  2          |  0       |
-------------------------------------------------------------
Oracle tags |  0         | 0       |  0          |  7       |

1 个答案:

答案 0 :(得分:1)

执行此操作的基本方法是

select * from 
(
    select workflow, progress, 0 as closed, 0 as finished, 0 as notyet from tb1
    union all
    select workflow, 0, closed, 0,0 from tb2
    union all
    select workflow, 0, 0, finished, 0 from tb3
    union all
    select workflow, 0, 0, 0, notyet from tb4
) t1

如果您需要分组结果,则:

select 
  workflow, 
  sum(progress) as progress, 
  sum(closed) as closed, 
  sum(finished) as finished, sum(notyet) as notyet 
from 
(
    select workflow, progress, 0 as closed, 0 as finished, 0 as notyet from tb1
    union all
    select workflow, 0, closed, 0,0 from tb2
    union all
    select workflow, 0, 0, finished, 0 from tb3
    union all
    select workflow, 0, 0, 0, notyet from tb4
) t1 
group by workflow;