Author |
Topic |
sqlfresher2k7
Aged Yak Warrior
623 Posts |
Posted - 2007-09-06 : 16:25:58
|
[code]Please help to rewrite the query to get the correct output.DECLARE @MT TABLE ( TNO Int, TID Int,TID2 Int,TID3 Int,Dt datetime ) INSERT INTO @MT (TNO, TID,TID2,TID3,dt) ( Select '256' , '5','7','5','5-4-2007' Union All Select '257', '6','5','7','5-4-2007' Union All Select '258', '6','8','6','6-4-2007' Union All Select '259', '7','6','7','7-4-2007' Union AllSelect '260', '7','6','5','7-4-2007' ) DECLARE @HIFRAP TABLE ( TID Int, DSCRPTR VARCHAR(50) ) INSERT INTO @HIFRAP (TID, DSCRPTR) ( Select '5' , 'Test5' Union All Select '6', 'Test6' Union All Select '7', 'Test7' Union All Select '8', 'Test8' ) SELECT d.DscrPtr, SUM(d.TID) AS TIDcount, SUM(d.TID2) AS TID2count, SUM(d.TID3) AS TID3count, SUM(d.TID + d.TID2 + d.TID3) AS SumcountFROM ( SELECT h.DscrPtr, CASE -- Assuming mdy time format WHEN m.DT >= '5-4-2007' AND m.DT < '5-5-2007' THEN 1 ELSE 0 END AS TID, 0 AS TID2, 0 AS TID3 FROM @HiFrap AS h LEFT JOIN @MT AS m ON m.TID2 = h.TID UNION ALL SELECT h.DscrPtr, 0 AS TID, CASE -- Assuming mdy time format WHEN m.DT >= '5-4-2007' AND m.DT < '5-5-2007' THEN 1 ELSE 0 END AS TID2, 0 AS TID3 FROM @HiFrap AS h LEFT JOIN @MT AS m ON m.TID2 = h.TID UNION ALL SELECT h.DscrPtr, 0 AS TID, 0 AS TID2, CASE -- Assuming mdy time format WHEN m.DT >= '5-4-2007' AND m.DT < '5-5-2007' THEN 1 ELSE 0 END AS TID3 FROM @HiFrap AS h LEFT JOIN @MT AS m ON m.TID3 = h.TID ) AS dGROUP BY d.DscrPtrORDER BY d.DscrPtrDesired Ouput:DscrPtr TIDcount TID2count TID3count Sumcount------- -------- --------- --------- ---------Test5 1 1 1 3Test6 1 0 0 1Test7 0 1 1 2Test8 0 0 0 0[/code] |
|
dinakar
Master Smack Fu Yak Hacker
2507 Posts |
Posted - 2007-09-06 : 16:44:25
|
Can you also explain the business logic on how you arrived at those numbers..Dinakar Nethi************************Life is short. Enjoy it.************************http://weblogs.sqlteam.com/dinakar/ |
 |
|
sqlfresher2k7
Aged Yak Warrior
623 Posts |
Posted - 2007-09-06 : 20:14:43
|
[code]Table:MTTNO TID TID2 TID3 dt---- --- ---- ---- -----------------------256 5 7 5 2007-05-04 00:00:00.000257 6 5 7 2007-05-04 00:00:00.000258 6 8 6 2007-06-04 00:00:00.000259 7 6 7 2007-07-04 00:00:00.000260 7 6 null 2007-07-04 00:00:00.000Table HIFRAP:TD Dscrpt-- -------5 Test56 Test67 Test78 Test8I want total counts of 5,6,7,8 from three columns TID,TID2,TID3 based on the date condition(filter)Ex: I want a count based on the date between 2007-05-04 00:00:00.000 and 2007-05-05 00:00:00.000 256 5 7 5 2007-05-04 00:00:00.000257 6 5 7 2007-05-04 00:00:00.000I should get the output TD Sumcount-------- ------- 5(Test5) 36(Test6) 17(Test7) 28(Test8) 0Please let me know if am not clear.[/code] |
 |
|
Koji Matsumura
Posting Yak Master
141 Posts |
Posted - 2007-09-06 : 22:20:06
|
DECLARE @MT TABLE (TNO int, TID int, TID2 int, TID3 int, Dt datetime) INSERT INTO @MTSELECT 256, 5, 7, 5, '5-4-2007' UNION ALL SELECT 257, 6, 5, 7, '5-4-2007' UNION ALL SELECT 258, 6, 8, 6, '6-4-2007' UNION ALL SELECT 259, 7, 6, 7, '7-4-2007' UNION ALL SELECT 260, 7, 6, 5, '7-4-2007' DECLARE @HIFRAP TABLE (TID int, DscrPtr VARCHAR(50)) INSERT INTO @HIFRAPSELECT 5, 'Test5' UNION ALL SELECT 6, 'Test6' UNION ALL SELECT 7, 'Test7' UNION ALL SELECT 8, 'Test8' DECLARE @D1 datetime, @D2 datetimeSELECT @D1 = '20070504', @D2 = '20070505'SELECT A.DscrPtr,(SELECT COUNT(*) FROM @MT Z WHERE Z.TID = A.TID AND Z.Dt BETWEEN @D1 AND @D2) AS TIDCount,(SELECT COUNT(*) FROM @MT Z WHERE Z.TID2 = A.TID AND Z.Dt BETWEEN @D1 AND @D2) AS TID2Count,(SELECT COUNT(*) FROM @MT Z WHERE Z.TID3 = A.TID AND Z.Dt BETWEEN @D1 AND @D2) AS TID3Count,(SELECT COUNT(*) FROM @MT Z WHERE Z.TID = A.TID AND Z.Dt BETWEEN @D1 AND @D2)+ (SELECT COUNT(*) FROM @MT Z WHERE Z.TID2 = A.TID AND Z.Dt BETWEEN @D1 AND @D2)+ (SELECT COUNT(*) FROM @MT Z WHERE Z.TID3 = A.TID AND Z.Dt BETWEEN @D1 AND @D2) AS SumCountFROM @HIFRAP AORDER BY A.TID |
 |
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-09-07 : 08:35:59
|
[code]SELECT a.DscrPtr, SUM(CASE WHEN a.TID = z.TID THEN 1 ELSE 0 END) AS TIDCount, SUM(CASE WHEN a.TID = z.TID2 THEN 1 ELSE 0 END) AS TID2Count, SUM(CASE WHEN a.TID = z.TID3 THEN 1 ELSE 0 END) AS TID3Count, SUM(CASE WHEN a.TID = z.TID THEN 1 ELSE 0 END + CASE WHEN a.TID = z.TID2 THEN 1 ELSE 0 END + CASE WHEN a.TID = z.TID3 THEN 1 ELSE 0 END) AS SumCountFROM @HIFRAP AS aLEFT JOIN @MT AS z ON z.Dt BETWEEN @D1 AND @D2GROUP BY a.DscrPtrORDER BY a.DscrPtr[/code] E 12°55'05.25"N 56°04'39.16" |
 |
|
sqlfresher2k7
Aged Yak Warrior
623 Posts |
Posted - 2007-09-08 : 10:42:50
|
Thanks !! |
 |
|
|
|
|