sql按月份区间查询记录

b283992238 2012-09-24 08:52:44


车型 年份 月份 数量
suv 2003 6月 0
suv 2003 7月 1
suv 2003 8月 0
suv 2003 9月 3
suv 2003 10月 0
suv 2003 11月 1
suv 2003 12月 2
ft 2003 6月 1
ft 2003 7月 0
ft 2003 8月 0
ft 2003 9月 1
ft 2003 10月 2
ft 2003 11月 3
ft 2003 12月 0
asd 2004 1月 2
asd 2004 2月 1
asd 2004 3月 0

如果我想查询2003年6月至2004年3月,怎么查询出下面的结果
----- ----------- ---------- -----------
车型 6月 7月 8月 9月 10月 11月 12月 1月 2月 3月
suv 0 1 0 3 0 1 2 0 0 0
ft 1 0 0 1 2 3 0 0 0 0
asd 0 0 0 0 0 0 0 2 1 0
...全文
576 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
-Tracy-McGrady- 2012-09-25
  • 打赏
  • 举报
回复
都是新手,赶紧学。
[Quote=引用 5 楼 的回复:]

可不可以帮我写下具体的语句,我是新手 不太懂……
[/Quote]
發糞塗牆 2012-09-25
  • 打赏
  • 举报
回复
CREATE TABLE test (车型 VARCHAR(10), 年份 VARCHAR(10),月份 VARCHAR(10),数量 INT )

INSERT INTO test
SELECT 'suv', '2003', '6月', 0
UNION ALL
SELECT 'suv', '2003', '7月', 1
UNION ALL
SELECT 'suv', '2003', '8月', 0
UNION ALL
SELECT 'suv', '2003', '9月', 3
UNION ALL
SELECT 'suv', '2003', '10月', 0
UNION ALL
SELECT 'suv', '2003', '11月', 1
UNION ALL
SELECT 'suv', '2003', '12月', 2
UNION ALL
SELECT 'ft', '2003', '6月', 1
UNION ALL
SELECT 'ft', '2003', '7月', 0
UNION ALL
SELECT 'ft', '2003', '8月', 0
UNION ALL
SELECT 'ft', '2003', '9月', 1
UNION ALL
SELECT 'ft', '2003', '10月', 2
UNION ALL
SELECT 'ft', '2003', '11月', 3
UNION ALL
SELECT 'ft', '2003', '12月', 0
UNION ALL
SELECT 'asd', '2004','1月', 2
UNION ALL
SELECT 'asd', '2004', '2月', 1
UNION ALL
SELECT 'asd', '2004', '3月', 0



SELECT 车型,SUBSTRING(年份+CASE WHEN LEN(SUBSTRING(月份,1,CHARINDEX('月',月份,1)))=2 THEN '0'+月份 ELSE 月份 END,
1,LEN(年份+CASE WHEN LEN(SUBSTRING(月份,1,CHARINDEX('月',月份,1)))=2 THEN '0'+月份 ELSE 月份 END)-1) 月份,数量 INTO #t
FROM test



declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename(SUBSTRING(月份,5,2)+'月')+'=max(case when [月份]='+quotename(月份,'''')+' then [数量] else 0 end)'
from #t WHERE 月份 BETWEEN '200308' AND '200402' group BY 月份
exec('select [车型]'+@s+' from #t group by [车型]')


/*
车型 08月 09月 10月 11月 12月 01月 02月
---------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
asd 0 0 0 0 0 2 1
ft 0 1 2 3 0 0 0
suv 0 3 0 1 2 0 0

(3 行受影响)

*/
發糞塗牆 2012-09-25
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20120924/14/9ef6cc88-7293-4260-b238-c3da58afcc58.html这个不是已经回复了你吗?可以的话早点结贴

CREATE TABLE test (车型 VARCHAR(10), 年份 VARCHAR(10),月份 VARCHAR(10),数量 INT )
INSERT INTO test

SELECT 'suv', '2003', '6月', 0
UNION ALL
SELECT 'suv', '2003', '7月', 1
UNION ALL
SELECT 'suv', '2003', '8月', 0
UNION ALL
SELECT 'suv', '2003', '9月', 3
UNION ALL
SELECT 'suv', '2003', '10月', 0
UNION ALL
SELECT 'suv', '2003', '11月', 1
UNION ALL
SELECT 'suv', '2003', '12月', 2
UNION ALL
SELECT 'ft', '2003', '6月', 1
UNION ALL
SELECT 'ft', '2003', '7月', 0
UNION ALL
SELECT 'ft', '2003', '8月', 0
UNION ALL
SELECT 'ft', '2003', '9月', 1
UNION ALL
SELECT 'ft', '2003', '10月', 2
UNION ALL
SELECT 'ft', '2003', '11月', 3
UNION ALL
SELECT 'ft', '2003', '12月', 0
UNION ALL
SELECT 'asd', '2004','1月', 2
UNION ALL
SELECT 'asd', '2004', '2月', 1
UNION ALL
SELECT 'asd', '2004', '3月', 0



SELECT 车型,SUBSTRING(年份+CASE WHEN LEN(SUBSTRING(月份,1,CHARINDEX('月',月份,1)))=2 THEN '0'+月份 ELSE 月份 END,
1,LEN(年份+CASE WHEN LEN(SUBSTRING(月份,1,CHARINDEX('月',月份,1)))=2 THEN '0'+月份 ELSE 月份 END)-1) 月份,数量 INTO #t
FROM test



declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename(SUBSTRING(月份,5,2))+'=max(case when [月份]='+quotename(月份,'''')+' then [数量] else 0 end)'
from #t WHERE 月份 BETWEEN '200308' AND '200402' group BY 月份
exec('select [车型]'+@s+' from #t group by [车型]')

/*
车型 08 09 10 11 12 01 02
---------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
asd 0 0 0 0 0 2 1
ft 0 1 2 3 0 0 0
suv 0 3 0 1 2 0 0

(3 行受影响)

*/
husang608 2012-09-25
  • 打赏
  • 举报
回复
车型   年份   6月          7月          8月          9月          10月         11月         12月         1月          2月          3月
---- ---- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
ft 2003 1 0 0 1 2 3 0 NULL NULL NULL
suv 2003 0 1 0 3 0 1 2 NULL NULL NULL
asd 2004 NULL NULL NULL NULL NULL NULL NULL 2 1 0

(3 行受影响)
husang608 2012-09-25
  • 打赏
  • 举报
回复
;with tab(车型, 年份, 月份, 数量)
as(
select 'suv', '2003', '6月', 0
union select 'suv', '2003', '7月', 1
union select 'suv', '2003', '8月', 0
union select 'suv', '2003', '9月', 3
union select 'suv', '2003','10月', 0
union select 'suv', '2003', '11月', 1
union select 'suv', '2003', '12月', 2
union select 'ft', '2003', '6月', 1
union select 'ft', '2003', '7月', 0
union select 'ft', '2003', '8月',0
union select 'ft', '2003', '9月', 1
union select 'ft', '2003', '10月', 2
union select 'ft', '2003', '11月', 3
union select 'ft', '2003', '12月', 0
union select 'asd', '2004', '1月', 2
union select 'asd', '2004','2月', 1
union select 'asd', '2004', '3月', 0
)

select *
from tab
PIVOT ( sum(数量) FOR [月份] IN ([6月], [7月], [8月], [9月], [10月] ,[11月] ,[12月], [1月], [2月], [3月]))a
晓风斜阳 2012-09-25
  • 打赏
  • 举报
回复

SELECT 车型,年份,[6月] AS '6月',[7月] AS '7月',[8月] AS '8月' FROM (
SELECT * FROM TABLE01 WHERE (年份+月份>='20036' AND 年份+月份<='20043')
) T
PIVOT (SUM([数量]) FOR [月份] IN ([6月],[7月],[8月])) AS PIV
ORDER BY [车型]
b283992238 2012-09-24
  • 打赏
  • 举报
回复
如果我给出一个时间区间 查出记录为2003的的8月至2004年的2月的记录,查出以后怎么显示下面的表
车型 8月 9月 10月 11月 12月 1月 2月


求大神们赐教
b283992238 2012-09-24
  • 打赏
  • 举报
回复
可不可以帮我写下具体的语句,我是新手 不太懂……
茫茫前路 2012-09-24
  • 打赏
  • 举报
回复
楼主搜下“行转列”,可以搜到好多这方面的,看看就知道了。
GorillazForthgoer 2012-09-24
  • 打赏
  • 举报
回复
BAIDU “SQL行转列”
--小F-- 2012-09-24
  • 打赏
  • 举报
回复
又见行列转换 。
代码转载自:https://pan.quark.cn/s/09cbd88c35be 在运用SQL查询对Oracle数据库执行时间段操作是一项核心能力,特别是在进行数据恢复与历史数据分析的场景下。 Oracle数据库展现了多样化的处理时间区间数据的技术,涵盖了SQL查询指令、闪回机制以及快照功能。 接下来将深入解析这些核心概念。 SQL查询是检索特定时间跨度内数据的基础手段。 在Oracle系统中,能够借助`BETWEEN`关键字来筛选出特定日期区间内的记录。 比如,若存在一个名为`orders`的表,其中设有`order_date`字段,则可以采用如下SQL语句查询2020年1月1日至2020年12月31日间的订单记录:```sqlSELECT * FROM ordersWHERE order_date BETWEEN DATE 2020-01-01 AND DATE 2020-12-31;```不仅如此,还可以通过`TO_DATE`函数将文本格式的日期转化为日期类型,并搭配`EXTRACT`函数提取日期的特定组成部分,例如年份、月份或日份,从而实现更为精密的日期筛选。 Oracle的快照功能提供了一种审视数据库历史状态的有效途径。 快照本质上是在某一特定时刻数据库的一个逻辑副本,主要用于数据恢复或深度分析。 构建快照通常涉及生成一个逻辑复制视图,该视图能够映射出源表在快照创建时刻的状态。 快照能够按需进行周期性更新,以同步源表的最新数据变更。 构建快照的SQL指令可能如下所示:```sqlCREATE SNAPSHOT snapshot_nameREFRESH COMPLETE ON DEMANDAS SELECT * FROM table_name;```此处,`ON DEM...

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧