Chr*_*ris 6 sql-server pivot case sql-server-2014 sum
我有以下查询,我希望老化配置文件显示为新列我的老化配置文件为 0-30、31-60、61-90、91-120、121-180、181-365、365+
我基本上希望结果出现在网络到期时出现在适当的老化支架中。
BU 0-30 31-60 61-90 91-120 121-180 181-365 365+
--------------------------------------------------------------
A
B
C
Run Code Online (Sandbox Code Playgroud)
询问:
select
BU,
Ageing,
sum(NetDue) as Netdue
from [dbo].[vw_FACT_CONSOL_CREDITORS]
where date = @date
Group by BU, Ageing
Order by BU ;
Run Code Online (Sandbox Code Playgroud)
我是 SQL 的新手,只是想学习所以很抱歉,因为这是基本的东西谢谢
假设老化值与预期输出中的列名称匹配,那么这应该有效:
SELECT *
FROM (
SELECT BU, Ageing, NetDue
FROM [dbo].[vw_FACT_CONSOL_CREDITORS]
WHERE Date = @date
) src
PIVOT
(
SUM(NetDue)
FOR Ageing IN ([0-30], [31-60], [61-90], [91-120], [121-180], [181-365], [365+])
) piv
Run Code Online (Sandbox Code Playgroud)
如果不是,那么您将需要向内部 select 语句添加一些逻辑,以将 Aging 从任何内容转换为这些字符串值(例如“0-30”、“365+”)。
作为检查这一点的示例,我执行了以下操作:
CREATE TABLE x (
BU INT,
NetDue SMALLMONEY,
Ageing VARCHAR(10),
Date DATE
)
INSERT x
VALUES
(1, 100, '31-60', '2017-04-01'),
(2, 25.47, '31-60', '2017-04-01'),
(1, 90.17, '31-60', '2017-05-01'),
(1, 16.42, '181-365', '2017-04-01'),
(2, 99.99, '365+', '2017-04-01')
SELECT *
FROM (
SELECT BU, Ageing, NetDue
FROM x
WHERE Date = '2017-04-01'
) src
PIVOT
(
SUM(NetDue)
FOR Ageing IN ([0-30], [31-60], [61-90], [91-120], [121-180], [181-365], [365+])
) piv
Run Code Online (Sandbox Code Playgroud)
产生的输出:
BU 0-30 31-60 61-90 91-120 121-180 181-365 365+
1 NULL 100.00 NULL NULL NULL 16.42 NULL
2 NULL 25.47 NULL NULL NULL NULL 99.99
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
845 次 |
最近记录: |