通过编写以下查询
SELECT item_name, YEAR( DATE ) , SUM( item_sold_qty )
FROM item
JOIN sales ON item.id = sales.item_number
GROUP BY YEAR( DATE ) , item_name
ORDER BY item_name
Run Code Online (Sandbox Code Playgroud)
我能够得到以下结果
item_name YEAR( DATE ) SUM( item_sold_qty )
pencil 2011 22
pencil 2012 44
eraser 2012 22
eraser 2011 11
pen 2012 66
pen 2011 33
nib 2012 88
nib 2011 44
Run Code Online (Sandbox Code Playgroud)
相反,我希望以下列方式得到结果
item_name 2011 2012
pencil 22 44
eraser 11 22
pen 33 66
nib 44 88
Run Code Online (Sandbox Code Playgroud)
我不是很擅长sql,并且不知道如何将年份设置为列名.需要帮忙.
注意 ::我的数据库有2个表.销售表的日期列有不同的日期,如2012-03-01,2012-04-02,2011-07-03,等......
也许是这样的:
SELECT
item_name,
SUM(CASE WHEN YEAR( DATE )=2011 THEN item_sold_qty ELSE 0 END) AS '2011',
SUM(CASE WHEN YEAR( DATE )=2012 THEN item_sold_qty ELSE 0 END) AS '2012'
FROM
item
JOIN sales ON item.id = sales.item_number
GROUP BY
item_name
ORDER BY
item_name
Run Code Online (Sandbox Code Playgroud)
编辑
如果你想要其他年份并仍然总结它们.然后你可以这样做:
SELECT
item_name,
SUM(CASE WHEN YEAR( DATE )=2011 THEN item_sold_qty ELSE 0 END) AS '2011',
SUM(CASE WHEN YEAR( DATE )=2012 THEN item_sold_qty ELSE 0 END) AS '2012',
SUM(CASE WHEN NOT YEAR( DATE ) IN (2011,2012) THEN item_sold_qty ELSE 0 END) AS 'AllOtherYears'
FROM
item
JOIN sales ON item.id = sales.item_number
GROUP BY
item_name
ORDER BY
item_name
Run Code Online (Sandbox Code Playgroud)
EDIT2
如果你有很多年,而且你不想继续增加岁月.然后你需要使用动态sql.这意味着您连接sql的varchar然后执行它.
有用的参考文献: