SELECT CAST(s.Year AS VARCHAR) +'年'+
CAST(s.Month AS VARCHAR)+'月',
tmp.quarter
FROM dbo.s_SalesBudget s INNER JOIN dbo.p_tmp tmp ON s.Month=tmp.month
WHERE YEAR = '2009'
GROUP BY s.Month,YEAR,tmp.quarter
with rollup
ORDER BY s.Month
CAST(s.Month AS VARCHAR)+'月',
tmp.quarter
FROM dbo.s_SalesBudget s INNER JOIN dbo.p_tmp tmp ON s.Month=tmp.month
WHERE YEAR = '2009'
GROUP BY s.Month,YEAR,tmp.quarter
with rollup
ORDER BY s.Month
解决方案 »
- 如何得到所有员工最高工资的月份记录呢?
- Sql Server已经有函数了,为什么还弄出个存储过程?
- 谁能看看哪错了,uid char(10) not null foreign key references users(uid)主外键约束的问题????????????????????????????
- 四道英文的数据库题目,大家来探讨一下
- 跪求一MSDE数据库恢复方法,在线等
- 给段SQL作业里的病毒代码,高手给解释下啥意思。
- 请教一个sql语句问题,请各位前辈帮我看一下,谢谢
- 急用!多列转为一行并按大小排列
- 一个简单的问题!谢谢各位!
- 如何定时改变数据库字段???并且需要把字段内容改为MD5加密的格式!!!
- 关于合计的问题,待解决啊
- 这个语句应该怎么写?
ELSE CAST(s.Year AS VARCHAR) + '年' + CAST(s.Month AS VARCHAR)
+ '月'
END ,
tmp.quarter
FROM dbo.s_SalesBudget s
INNER JOIN dbo.p_tmp tmp ON s.Month = tmp.month
WHERE YEAR = '2009'
GROUP BY s.Month ,
YEAR ,
tmp.quarter
WITH ROLLUP
ORDER BY s.Month
这样写报错:
消息 8161,级别 16,状态 1,第 1 行
GROUPING 函数的参数 1 与 GROUP BY 子句中的任何表达式都不匹配。
各位帮我看下什么原因
改成这样试试:
SELECT CASE WHEN GROUPING(tmp.quarter) <> 1 THEN '0'
ELSE CAST(s.Year AS VARCHAR) + '年' + CAST(s.Month AS VARCHAR)
+ '月'
END ,
tmp.quarter
FROM dbo.s_SalesBudget s
INNER JOIN dbo.p_tmp tmp ON s.Month = tmp.month
WHERE YEAR = '2009'
GROUP BY s.Month ,
YEAR ,
tmp.quarter
WITH ROLLUP
ORDER BY s.Month
改成这样试试:
SELECT CASE WHEN GROUPING(tmp.quarter) <> 1 THEN '0'
ELSE CAST(s.Year AS VARCHAR) + '年' + CAST(s.Month AS VARCHAR)
+ '月'
END ,
tmp.quarter
FROM dbo.s_SalesBudget s
INNER JOIN dbo.p_tmp tmp ON s.Month = tmp.month
WHERE YEAR = '2009'
GROUP BY s.Month ,
YEAR ,
tmp.quarter
WITH ROLLUP
ORDER BY s.Month
不报错了,但显示的方式不是想要的呀
小计 NULL
2009年1月 1
小计 NULL
小计 NULL
2009年2月 1
小计 NULL
小计 NULL
2009年3月 1
小计 NULL
小计 NULL
2009年4月 2
小计 NULL
小计 NULL
2009年5月 2
小计 NULL
小计 NULL
2009年6月 2
小计 NULL
小计 NULL
2009年7月 3
小计 NULL
小计 NULL
2009年8月 3
小计 NULL
小计 NULL
2009年9月 3
小计 NULL
小计 NULL
2009年10月 4
小计 NULL
小计 NULL
2009年11月 4
小计 NULL
小计 NULL
2009年12月 4
小计 NULL
小计 NULL
如果=1的话就是这样
NULL NULL
小计 1
2009年1月 NULL
NULL NULL
小计 1
2009年2月 NULL
NULL NULL
小计 1
2009年3月 NULL
NULL NULL
小计 2
2009年4月 NULL
NULL NULL
小计 2
2009年5月 NULL
NULL NULL
小计 2
2009年6月 NULL
NULL NULL
小计 3
2009年7月 NULL
NULL NULL
小计 3
2009年8月 NULL
NULL NULL
小计 3
2009年9月 NULL
NULL NULL
小计 4
2009年10月 NULL
NULL NULL
小计 4
2009年11月 NULL
NULL NULL
小计 4
2009年12月 NULL
NULL NULL
2013年1月 1
2013年2月 1
2013年3月 1
null 1
是这样吗
2009年2月
2009年3月
一季度汇总
2009年4月
2009年5月
2009年6月
二季度汇总
2009年7月
2009年8月
2009年9月
三季度汇总
2009年10月
2009年11月
2009年12月
四季度汇总
2009年汇总
想要这种格式的,不知道怎么写试试这个:
SELECT CASE WHEN GROUPING(tmp.quarter) <> 1 THEN CAST(tmp.quarter as varchar)+'季度小计'
ELSE CAST(s.Year AS VARCHAR) + '年' + CAST(s.Month AS VARCHAR)
+ '月'
END ,
tmp.quarter
FROM dbo.s_SalesBudget s
INNER JOIN dbo.p_tmp tmp ON s.Month = tmp.month
WHERE YEAR = '2009'
GROUP BY
YEAR ,
tmp.quarter,s.Month
WITH ROLLUP
having GROUPING(year) = 0
ORDER BY s.Month
2009年2月
2009年3月
一季度汇总
2009年4月
2009年5月
2009年6月
二季度汇总
2009年7月
2009年8月
2009年9月
三季度汇总
2009年10月
2009年11月
2009年12月
四季度汇总
2009年汇总
想要这种格式的,不知道怎么写试试这个:
SELECT CASE WHEN GROUPING(tmp.quarter) <> 1 THEN CAST(tmp.quarter as varchar)+'季度小计'
ELSE CAST(s.Year AS VARCHAR) + '年' + CAST(s.Month AS VARCHAR)
+ '月'
END ,
tmp.quarter
FROM dbo.s_SalesBudget s
INNER JOIN dbo.p_tmp tmp ON s.Month = tmp.month
WHERE YEAR = '2009'
GROUP BY
YEAR ,
tmp.quarter,s.Month
WITH ROLLUP
having GROUPING(year) = 0
ORDER BY s.Month
把ORDER 那去掉就行了,大神啊,告诉我,为什么这句可以吗?我想知道原理
2009年2月
2009年3月
一季度汇总
2009年4月
2009年5月
2009年6月
二季度汇总
2009年7月
2009年8月
2009年9月
三季度汇总
2009年10月
2009年11月
2009年12月
四季度汇总
2009年汇总
想要这种格式的,不知道怎么写试试这个:
SELECT CASE WHEN GROUPING(tmp.quarter) <> 1 THEN CAST(tmp.quarter as varchar)+'季度小计'
ELSE CAST(s.Year AS VARCHAR) + '年' + CAST(s.Month AS VARCHAR)
+ '月'
END ,
tmp.quarter
FROM dbo.s_SalesBudget s
INNER JOIN dbo.p_tmp tmp ON s.Month = tmp.month
WHERE YEAR = '2009'
GROUP BY
YEAR ,
tmp.quarter,s.Month
WITH ROLLUP
having GROUPING(year) = 0
ORDER BY s.Month
把ORDER 那去掉就行了,大神啊,告诉我,为什么这句可以吗?我想知道原理哦 ,1.你用了rollup之后,一定注意group by中字段的顺序,我上面改了一下,把年,季度放在了前面,月放在最后,这样月就只有明细的数据,而从年开始到季度,会有小计2.由于你不需要年的小计,所以 加了 having GROUPING(year) = 0 也就是过滤掉年的小计数据。