【发布时间】:2018-11-05 19:21:41
【问题描述】:
我想按月和年计算每个国家和组的不同 order_number,如下所示
我正在使用这个查询,但我没有得到我想要的结果
select
concat(DATENAME(month, purchase_date), ' ' , DATENAME(year, purchase_date)) as [Month-Year],
country, count(distinct [order_number]) as [Distinct Order Number]
from SC.mytable
group by DATENAME(year, purchase_date), DATENAME(month, purchase_date),country
Order by DATENAME(year, purchase_date) ASC,
case DATENAME(month, purchase_date)
when 'January' then 1
when 'February' then 2
when 'March' then 3
when 'April' then 4
when 'May' then 5
when 'June' then 6
when 'July' then 7
when 'August' then 8
when 'September' then 9
when 'October' then 10
when 'November' then 11
when 'December' then 12
end asc
,country asc
我得到如下结果
您能否告知组中的问题,以便月份-年份将在标题中水平显示?
这是表的创建和值,以防您需要尝试。感谢您的支持。
CREATE TABLE SC.mytable (
country varchar(50) NOT NULL,
order_number varchar(10) NOT NULL,
order_item varchar(2) NOT NULL,
purchase_date date NOT NULL
);
INSERT INTO SC.mytable (country, order_number, order_item, purchase_date) VALUES
('Germany', '4311787830', '10','2018-11-01'),
('France', '4221669938', '90','2018-10-29'),
('Austria', '4216370706', '50','2018-08-17'),
('Austria', '4216370706', '60','2018-08-17'),
('Germany', '4320162822', '10','2018-07-16'),
('Germany', '4320162822', '20','2018-07-16'),
('UK', '4216775391', '80','2018-04-30'),
('UK', '4214370307', '50','2018-08-23'),
('Germany', '4311780287', '40','2018-03-11'),
('Germany', '4216334860', '70','2018-08-27'),
('Spain', '4911235852', '30','2018-12-10'),
('Spain', '4719832003', '90','2018-12-18'),
('France', '4216325304', '30','2018-05-04'),
('France', '4216325304', '40','2018-05-04');
【问题讨论】:
-
group by本身永远不会给你列......只有行。如果您想将行转换为列,请查看pivot函数。 -
将那些 CASE WHEN DATENAME 更改为对 MONTH(purchasedate) 的调用。在这个查询中每次使用 DATENAME 都是多余的
标签: sql sql-server database tsql