首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有月份和年份的SQL数据轴

带有月份和年份的SQL数据轴
EN

Stack Overflow用户
提问于 2020-01-13 15:12:30
回答 1查看 3.1K关注 0票数 3

我正在尝试使用SQL对一些装运数据进行排序,但我想不出答案。我已经以这种方式对数据进行了排序(从2015年到2015年,每个家庭每个月的总发货量为一行):

表A

代码语言:javascript
复制
Year | Month | ItemFamilyCode | TotalShipped
2018 |   9   |    FA01        |       5
2018 |   9   |    FA04        |       4
2018 |   10  |    FA01        |       2
2018 |   11  |    FA02        |       1
2018 |   12  |    FA03        |       3
2019 |   1   |    FA04        |       7

诸若此类。我希望取得以下成果:

代码语言:javascript
复制
ItemFamilyCode | 2018-9 | 2018-10 | 2018-11 | 2018-12 | 2019-1 | [..]
FA01           |    5   |    2    |    0    |    0    |    0   |
FA02           |    0   |    0    |    1    |    0    |    0   |
FA03           |    0   |    0    |    0    |    3    |    0   |
FA04           |    4   |    0    |    1    |    0    |    7   |

等等..。家庭代码的顺序和每个月的每个月的所有值,从旧的月/年到现在。有可能吗?感谢任何能帮忙的人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-13 16:00:23

如果您想将它用作view

代码语言:javascript
复制
SELECT * FROM   
(
    SELECT 
        Concat([Year],'-', [Month]) as [Date],
        ItemFamilyCode,
        TotalShipped
    FROM Shipping -- Or any Table Name
) t 
PIVOT(
    Sum(TotalShipped) 
    FOR [Date] IN (
        [2018-9], 
        [2018-10], 
        [2018-11], 
        [2018-12], 
        [2019-1], 
        [2019-2] -- You have to type all months until today
        )
) AS pivot_table;

如果您可以在dynamic sql中使用它,请使用stored procedure

创建一个包含日期列表内容的表,以生成日期列表字符串

代码语言:javascript
复制
DECLARE 
    @columns NVARCHAR(MAX) = '', 
    @sql     NVARCHAR(MAX) = '';

-- select the category names
SELECT 
    @columns+=QUOTENAME(Date) + ','
FROM 
    DateList
ORDER BY 
    DateList;

-- remove the last comma
SET @columns = LEFT(@columns, LEN(@columns) - 1);

-- construct dynamic SQL
SET @sql ='
SELECT * FROM   
(
    SELECT 
        Concat([Year],'-', [Month]) as [Date],
        ItemFamilyCode,
        TotalShipped 
    FROM Shipping -- Or any Table Name
) t 
PIVOT(
    Sum(TotalShipped)  
    FOR [Date] IN ('+ @columns +')
) AS pivot_table;';

-- execute the dynamic SQL
EXECUTE sp_executesql @sql;

来源:Sqlserver教程

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59719272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档