Click here to Skip to main content
15,903,175 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
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

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
Posted
Updated 3-Jun-13 20:40pm
v2

Try this...
SQL
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!
:)
 
Share this answer
 
v2
Comments
subbu a 4-Jun-13 4:14am    
retrieving after 5 days data also also means(packetsCountBetweenDD(16 to 20)
Aarti Meswania 4-Jun-13 4:32am    
last row o/p you want is
20009 2013 5 0 1

but check input last 2 line
1080 20009 24132 2013 5 13 18 19 48
1080 20009 24133 2013 5 13 18 28 36
if it's like this then
1080 20009 24132 2013 5 13 18 19 48
1080 20009 24133 2013 5 16 18 28 36

then I could change my query
Aarti Meswania 4-Jun-13 4:40am    
see updated solution
Try this:
SQL
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
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900