sql查询在两个日期之间检索。 [英] sql query retrieving between two dates.

查看:138
本文介绍了sql查询在两个日期之间检索。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的表格数据



This is My Table Data

  a    b     c      YY   MM  DD  Hr  Min Sec
1080 20006  24122  2013  5   6   17  8   1
1080 20006  24123  2013  5   7   17  16  28
1080 20006  24124  2013  5   11  17  21  21
1080 20006  24125  2013  5   13  17  25  12
1080 20007  24126  2013  7   9   17  30  13
1080 20007  24127  2013  7   9   17  40  2
1080 20007  24128  2013  7   9   17  49  35
1080 20007  24129  2013  7   9   18  0   10
1080 20008  24130  2013  8   9   18  6   27
1080 20008  24131  2013  8   11  18  12  55
1080 20009  24132  2013  5   13  18  19  48
1080 20009  24133  2013  5   13  18  28  36



我想要结果格式化。(结果基于数据(DD)和月份(MM))




I want result bellow format.(Result based on data(DD) and month(MM))

  b     YY   MM  PacketsCountbetweenDD(0t10)     PacketsCountbetweenDD(11t15)
20006  2013  5         2                                2
20007  2013  7         4                                0
20008  2013  8             1                                1
20009  2013  5             0                                1

推荐答案

试试这个。 ..

Try this...
select b,YY,MM,Isnull([0],0) as [PacketsCountbetweenDD(0 to 10)],isnull([10],0) [PacketsCountbetweenDD(11 to 15)],isnull([20],0) [PacketsCountbetweenDD(15 to 20)]  from
(
    SELECT b,YY,MM,c ,PacketCategory
    FROM
    (
        SELECT b,YY,MM, count(c) c, round(DD,-1,case when DD>15 then 0.5 else 1 end) AS PacketCategory
        FROM YourTblNm
        group by  b,YY,MM, round(DD,-1,case when DD>15 then 0.5 else 1 end)
    ) as aa
    GROUP BY b,YY,MM ,c, PacketCategory
) as a
pivot (max (c) for PacketCategory in ([0],[10],[20])) as pvttbl



快乐编码!

:)


Happy Coding!
:)


试试这个:

Try this:
DECLARE @tmp TABLE (a INT, b INT, c INT, [YY] INT, [MM] INT, [DD] INT, [Hr] INT, [Min] INT, [Sec] INT)

INSERT INTO @tmp (a, b, c, [YY], [MM], [DD], [Hr], [Min], [Sec]) 
SELECT 1080 AS a, 20006 as b, 24122 AS c, 2013 AS [YY], 5 AS [MM], 6 AS [DD], 17 AS [Hr], 8 AS [Min], 1 AS [Sec]
UNION ALL
SELECT 1080, 20006, 24123, 2013, 5,  7,  17, 16, 28
UNION ALL
SELECT 1080, 20006, 24124, 2013, 5,  11, 17, 21, 21
UNION ALL
SELECT 1080, 20006, 24125, 2013, 5,  13, 17, 25, 12
UNION ALL
SELECT 1080, 20007, 24126, 2013, 7,  9,  17, 30, 13
UNION ALL
SELECT 1080, 20007, 24127, 2013, 7,  9,  17, 40, 2
UNION ALL
SELECT 1080, 20007, 24128, 2013, 7,  9,  17, 49, 35
UNION ALL
SELECT 1080, 20007, 24129, 2013, 7,  9,  18, 0,  10
UNION ALL
SELECT 1080, 20008, 24130, 2013, 8,  9,  18, 6,  27
UNION ALL
SELECT 1080, 20008, 24131, 2013, 8,  11, 18, 12, 55
UNION ALL
SELECT 1080, 20009, 24132, 2013, 5,  13, 18, 19, 48
UNION ALL
SELECT 1080, 20009, 24133, 2013, 5,  13, 18, 28, 36

SELECT b, [YY], [MM], [Packet0to10], [Packet11to15], [MoreThan15]
FROM (
	SELECT b, [YY], [MM], [PacketName], COUNT([DD]) AS CountOfPackets
	FROM (
		SELECT b, [YY], [MM], [DD], CASE
			WHEN [DD] >=0 AND [DD] <=10 THEN 'Packet0to10'
			WHEN [DD] >10 AND [DD] <=15 THEN 'Packet11to15'
			ELSE 'MoreThan15' END AS [PacketName] 
		FROM @tmp
		) AS T
	GROUP BY b, [YY], [MM], [PacketName]
	) AS DT
PIVOT (SUM([CountOfPackets]) FOR [PacketName] IN ([Packet0to10], [Packet11to15], [MoreThan15])) AS PT


这篇关于sql查询在两个日期之间检索。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆