首页 > 解决方案 > SQL 我想得到以下输出

问题描述

我有一张销售表

Date_s sales_man product qty
1-Jan-18   xx    01       30
1-Jan-18   xx    01       20
1-Jan-18   xy    01       20 
1-Feb-18   xz    02       10
5-Feb-18   xz    02       30
1-Feb-18   xx    01       10
1-Feb-18   xx    01       40
1-Mar-18   xy    03       20

我想得到以下输出数据格式

Product  sales_man  Jan  Feb   Mar
01       xx         50    10    0 
01       xy         20    0     0 
02       xx         0     0     0
02       xy         0     0     0
02       xz         0     0     0
03       xy         0     0     20

标签: sqlsql-servertsqlpivot

解决方案


您可以使用聚合。像这样的东西:

select product, salesperson,
       sum(case when extract(month from dates) = 1 then qty else 0 end) as jan,
       sum(case when extract(month from dates) = 2 then qty else 0 end) as feb
from t
group by product, salesperson;

这使用 ANSI SQL 日期函数,因为您的数据库标记不清楚。日期操作可能因数据库而异。

此外,在按月查看数据时,通常您还希望将年份考虑在内(通过过滤或聚合年份)。


推荐阅读