枢轴生成类似矩阵的输出而无需聚合函数
Pivot to produce Matrix like output without aggregate function
我有三张表。
周期表(总是最近 4 年)
**ID Year**
1 2016
2 2017
3 2018
4 2019
StatusTable(总是四个状态)
**ID Status**
1 Completed
2 Open
3 New
4 Declained
事务表
**Year AccountName TotalAmount Status**
2019 King 1000000.00 Declained
2019 BlueBird 3800000.00 Completed
2018 Heartly Inc 250000.00 Open
2016 ABB Data 1500000.00 Completed
2016 Delta 500000.00 Declained
预期输出:
总号来自 TransactionTable * 4 年的状态。在本例中为 20 行。
**Year AccountName TotalAmount Status**
2019 King 1000000.00 Declained
2019 BlueBird 3800000.00 Completed
2019 NULL NULL Open
2019 NULL NULL Completed
2019 NULL NULL Declained
2018 NULL NULL Declained
2018 NULL NULL Completed
2018 Heartly Inc 250000.00 Open
2018 NULL NULL Completed
2018 NULL NULL Declained
2017 NULL NULL Declained
2017 NULL NULL Completed
2017 NULL NULL Open
2017 NULL NULL Completed
2017 NULL NULL Declained
2016 NULL NULL Declained
2016 NULL NULL Completed
2016 NULL NULL Open
2016 ABB Data 1500000.00 Completed
2016 Delta 500000.00 Declained
我尝试了 google 的许多解决方案,但没有任何效果。
是否可以通过 pivot 函数实现,因为我这里不需要聚合选项。
尝试这样的事情:
select
p.Year,
case when p.Year <> t.Year then null else t.AccountName end as AccountName,
case when p.Year <> t.Year then null else t.TotalAmount end as TotalAmount,
t.Status
from #period as p
cross join #trans as t
order by p.Year desc
您可以在 SQL Fiddle
进行测试
我有三张表。
周期表(总是最近 4 年)
**ID Year**
1 2016
2 2017
3 2018
4 2019
StatusTable(总是四个状态)
**ID Status**
1 Completed
2 Open
3 New
4 Declained
事务表
**Year AccountName TotalAmount Status**
2019 King 1000000.00 Declained
2019 BlueBird 3800000.00 Completed
2018 Heartly Inc 250000.00 Open
2016 ABB Data 1500000.00 Completed
2016 Delta 500000.00 Declained
预期输出: 总号来自 TransactionTable * 4 年的状态。在本例中为 20 行。
**Year AccountName TotalAmount Status**
2019 King 1000000.00 Declained
2019 BlueBird 3800000.00 Completed
2019 NULL NULL Open
2019 NULL NULL Completed
2019 NULL NULL Declained
2018 NULL NULL Declained
2018 NULL NULL Completed
2018 Heartly Inc 250000.00 Open
2018 NULL NULL Completed
2018 NULL NULL Declained
2017 NULL NULL Declained
2017 NULL NULL Completed
2017 NULL NULL Open
2017 NULL NULL Completed
2017 NULL NULL Declained
2016 NULL NULL Declained
2016 NULL NULL Completed
2016 NULL NULL Open
2016 ABB Data 1500000.00 Completed
2016 Delta 500000.00 Declained
我尝试了 google 的许多解决方案,但没有任何效果。 是否可以通过 pivot 函数实现,因为我这里不需要聚合选项。
尝试这样的事情:
select
p.Year,
case when p.Year <> t.Year then null else t.AccountName end as AccountName,
case when p.Year <> t.Year then null else t.TotalAmount end as TotalAmount,
t.Status
from #period as p
cross join #trans as t
order by p.Year desc
您可以在 SQL Fiddle
进行测试