求一条sql语句,请大神帮忙

现在有一张位置表,一张与订单的关系表,一张订单表
位置表:
id 位置名称

订单关系表:
id 位置表id 订单表id 创建时间

订单表:
id 状态 创建时间

现在要查询出这样的数据。

假如说已经把位置表的数据找出来了,我现在要查位置表id为23的订单数据,要如下显示
日 期:1 2 3 4 5 6 ... 31
订单数:2 0 1 5 1 4 ... 3

就是说,将一个月内每一天的订单量查出来,没有的日期补零。
求一条sql语句搞定,长一点也没关系,帮助大的可以加分,3q啦!
顺便一说,数据库是oracle

SELECT
SUM(CASE WHEN DAY(创建时间)=1 THEN 1 ELSE 0 END) AS [1号],
SUM(CASE WHEN DAY(创建时间)=2 THEN 1 ELSE 0 END) AS [2号],
SUM(CASE WHEN DAY(创建时间)=3 THEN 1 ELSE 0 END) AS [3号],
。。。。。。
SUM(CASE WHEN DAY(创建时间)=30 THEN 1 ELSE 0 END) AS [30号],
SUM(CASE WHEN DAY(创建时间)=31 THEN 1 ELSE 0 END) AS [31号]
FROM
订单关系表
WHERE
位置表id = 23
AND YEAR(创建时间) = 2013
AND MONTH(创建时间) = 5;

这样的效果行么?

Oracle 的话, 就是

SELECT
SUM(CASE WHEN EXTRACT(DAY FROM 创建时间)=1 THEN 1 ELSE 0 END) AS "1号",
SUM(CASE WHEN EXTRACT(DAY FROM 创建时间)=2 THEN 1 ELSE 0 END) AS "2号",
SUM(CASE WHEN EXTRACT(DAY FROM 创建时间)=3 THEN 1 ELSE 0 END) AS "3号",
。。。。。。
SUM(CASE WHEN EXTRACT(DAY FROM 创建时间)=30 THEN 1 ELSE 0 END) AS "30号",
SUM(CASE WHEN EXTRACT(DAY FROM 创建时间)=31 THEN 1 ELSE 0 END) AS "31号"
FROM
订单关系表
WHERE
位置表id = 23
AND EXTRACT(YEAR FROM 创建时间) = 2013
AND EXTRACT(MONTH FROM 创建时间) = 5;
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-10
SELECT ISNULL(CONVERT(char(7) , [创建时间] , 120 ) , 0)
,COUNT(订单表id) as [订单数量]
FROM [订单关系表]
WHERE [位置表id] = 23 and [创建时间] between '2013-01-01' and '2013-02-01'
group by CONVERT(char(7) , [创建时间] , 120 )
第2个回答  2013-05-10
网址正是你需要的,希望对你有帮助http://www.cnblogs.com/zhu1531/archive/2012/07/31/2616991.html
第3个回答  2013-05-10
觉得一句话写出来有点不可能,这样的动态语句怎么可能一句sql写出来啊。日期是变化的,订单数也是变化的,建议写存储过程了,用循环可以轻松到达了。

sql语句,求大神
select sub.d_name,parent.d_name from dept sub left join dept parent on sub.t_id = parent.d_id where sub.d_id = 1003

sql 语句 求大神帮忙分析 “查询选修了所有课程的学生姓名”_百度知 ...
其结果传给查询(2),(2)中得到的结果是课程表没有值的信息,有传给查询(1),又因为查询(1)中有“not exist”,所以在查询(2)的基础上,查询(1)的结果是没有选修课的学生的姓名。

sql语句编写,求大神帮忙
select Name, Score from (select *, dense_rank() over(order by Score desc) as N from Student) as tempwhere N <= 3结果就是成绩排名前3的所有学生有多少出多少 还有一种方法就是先获取前3的成绩,然后在学生里面找成绩符合其中一个的 select * from Student where Score in(select ...

求大神赐教SQL语句 so easy
楼主是否想把消息FromId和ToId换成用户的名字,如果是这样的话一下语句可以实现:select MessageId,MessageInfo,(select UserName from UserInfo where UserId=FromId) as FromUser,(select UserName from UserInfo where UserId=ToId) as ToUser,IsOpen,Date from Message ...

sql语句 求大神来,如果获取树的根节点(苹果和卷心菜)的所有字段_百度知 ...
---建个表create table test (resourceid varchar(32),levelclassid varchar(32),name varchar(32))insert into test select 'INDEX' ,'' , '根'union select 'fruit','INDEX','水果'union select 'vegetable','INDEX','蔬菜'union select 'apple','fruit','苹果'union select 'cabbage'...

求助,一个sql语句不会写,跪求帮助啊
Union all Select name,-1*score From deleted ) S Group By name ) N on M.name=N.Name When matched Then update Set M.sumscore=M.sumscore+N.score When Not matched Then Insert Values(N.Name,N.score);End ...

求大神指点以下SQL查询语句
1、这是sql中常用的“相关子查询”;2、相关子查询的执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询的表。 执行过程:(1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。(2)执行内层查询,得到子查询操作的值。(3)外查询根据子查询返回的结果或结果集得到满足...

有几个SQL语句求大神指点
1、insert into B(a) select a from A where a= '1'2、create view v_create_v select * from a create procedure p_ctrate_table as begin select * from A end3、(1)select count(*) from 职员表 group by 性别 (2)select case 分数 when >90 then '优' w...

sql语句计算满足1+2+…+n<8888的最大整数n.很急用,求大神相助谢谢...
DECLARE @n INT,@sum INT SET @sum = 0 SET @n = 1 SET @sum = @sum + @n WHILE(@sum < 8888)BEGIN SET @n = @n + 1 SET @sum = @sum + @n END PRINT(@n - 1)--此时的@n是最大整数n+1,因为1+2+...+n已经大于8888 ...

哪位大神给一个取上期累计数的SQL语句
select 合同编号, (select sum(本期付款金额) from A tbb where tbb.合同编号= tba.合同编号 and tbb.申请日期 < tba.申请日期)) 上期累计付款 from a tba

相似回答
大家正在搜