| Author |
Topic |
|
coagulance
Yak Posting Veteran
78 Posts |
Posted - 2008-04-23 : 15:30:24
|
| Hi ,If any one could help me in Joining these two select statements:How Can I have Order by and Having Clauses in my final select list ?***********SELECT MIN(DISTINCT x.ProductionDate) as ProductionDay,COUNT(DISTINCT v.Number) as Timelost FROM master..spt_values AS v INNER JOIN ( SELECT DATEDIFF(MINUTE, '00:00:00', Convert(varchar(10),StartDate,108)) AS StartMinute, DATEDIFF(MINUTE, '00:00:00', Convert(varchar(10),EndDate,108)) AS EndMinute, Convert(varchar(10),StartDate,102) as ProductionDate --,COUNT(AlarmMessage) As Occurances FROM RPMS.dbo.List_PaintShopAlarms WHERE --Convert(varchar(10),StartDate,102) = @vcProductionDay and Convert(varchar(10),StartDate,102) = Convert(varchar(10),EndDate,102) AND (AlarmMessage LIKE '7FM%' OR AlarmMessage LIKE 'CONV%' OR AlarmMessage LIKE 'EMG%' ) ) AS x ON x.StartMinute <= v.Number AND x.EndMinute > v.Number WHERE v.Type = 'p' AND Number < 1440 and (x.ProductionDate BETWEEN Convert(varchar(10),@dtProductionDayStart,102) AND Convert(varchar(10),@dtProductionDayEnd,102)) group by x.ProductionDate order by x.ProductionDate asc***********and***********SELECT Convert(varchar(25),[StartDate],102)as ProductionDay ,COUNT(AlarmMessage) As Occurances FROM [RPMS].[dbo].[List_PaintShopAlarms] WHERE ([AlarmMessage] LIKE '7fm%' or [AlarmMessage] LIKE 'Conve%') AND Convert(varchar(25),[StartDate],102) BETWEEN Convert(varchar(25),@dtStartDate,102) AND Convert(varchar(25),@dtEndDate,102) and DATEPART(dw, [ProductionDay]) <> 1 GROUP BY Convert(varchar(25),[StartDate],102) HAVING SUM([Duration]) < 86400 ORDER BY Convert(varchar(25),[StartDate],102) asc ************* |
|
|
coagulance
Yak Posting Veteran
78 Posts |
Posted - 2008-04-23 : 17:20:45
|
| DECLARE @Table1 TABLE(ProductionDay datetime , Occurances int)DECLARE @Table2 TABLE(ProductionDay datetime , TimeLost int)DECLARE @dtStartDate DATETIME,@dtEndDate DATETIMESET @dtStartDate = '2008.04.01'SET @dtEndDate = '2008.04.23'INSERT INTO @Table1 SELECT Convert(varchar(25),[StartDate],102)as 'ProductionDay' ,COUNT(AlarmMessage) As 'Occurances' FROM [RPMS].[dbo].[List_PaintShopAlarms] WHERE ([AlarmMessage] LIKE '7fm%' or [AlarmMessage] LIKE 'Conve%') AND Convert(varchar(25),[StartDate],102) BETWEEN Convert(varchar(25),@dtStartDate,102) AND Convert(varchar(25),@dtEndDate,102) --and DATEPART(dw, [ProductionDay]) <> 1 GROUP BY Convert(varchar(25),[StartDate],102) HAVING SUM([Duration]) < 86400 ORDER BY Convert(varchar(25),[StartDate],102) asc INSERT INTO @Table2SELECT MIN(DISTINCT x.ProductionDate) as ProductionDay,COUNT(DISTINCT v.Number) as Timelost FROM master..spt_values AS v INNER JOIN ( SELECT DATEDIFF(MINUTE, '00:00:00', Convert(varchar(10),StartDate,108)) AS StartMinute, DATEDIFF(MINUTE, '00:00:00', Convert(varchar(10),EndDate,108)) AS EndMinute, Convert(varchar(10),StartDate,102) as ProductionDate --,COUNT(AlarmMessage) As Occurances FROM RPMS.dbo.List_PaintShopAlarms WHERE --Convert(varchar(10),StartDate,102) = @vcProductionDay and Convert(varchar(10),StartDate,102) = Convert(varchar(10),EndDate,102) AND (AlarmMessage LIKE '7FM%' OR AlarmMessage LIKE 'CONV%' OR AlarmMessage LIKE 'EMG%' ) ) AS x ON x.StartMinute <= v.Number AND x.EndMinute > v.Number WHERE v.Type = 'p' AND Number < 1440 and (x.ProductionDate BETWEEN Convert(varchar(10),@dtStartDate,102) AND Convert(varchar(10),@dtEndDate,102)) group by x.ProductionDate order by x.ProductionDate ascSELECT Convert(varchar(10),T1.ProductionDay,102),T1.Occurances,T2.TimeLost FROM @Table1 T1 INNER JOIN @Table2 T2 ON T1.ProductionDay = T2.ProductionDayIs there any thing better than using Temp Tables? |
 |
|
|
bfoster
Starting Member
30 Posts |
Posted - 2008-04-24 : 11:41:22
|
| You should be able to take the query you gave and just replace @Table1 with the query that fills it and @Table2 with the query that fills it like this.SELECT Convert(varchar(10),T1.ProductionDay,102),T1.Occurances,T2.TimeLost FROM (SELECT Convert(varchar(10),[StartDate],102)as 'ProductionDay',COUNT(AlarmMessage) As 'Occurances'FROM [RPMS].[dbo].[List_PaintShopAlarms]WHERE ([AlarmMessage] LIKE '7fm%' or [AlarmMessage] LIKE 'Conve%') ANDConvert(varchar(10),[StartDate],102) BETWEEN Convert(varchar(10),@dtStartDate,102) AND Convert(varchar(10),@dtEndDate,102) --and DATEPART(dw, [ProductionDay]) <> 1 GROUP BY Convert(varchar(10),[StartDate],102)HAVING SUM([Duration]) < 86400)T1 INNER JOIN (SELECT MIN(DISTINCT x.ProductionDate) as ProductionDay,COUNT(DISTINCT v.Number) as Timelost FROM master..spt_values AS vINNER JOIN (SELECT DATEDIFF(MINUTE, '00:00:00', Convert(varchar(10),StartDate,108)) AS StartMinute,DATEDIFF(MINUTE, '00:00:00', Convert(varchar(10),EndDate,108)) AS EndMinute,Convert(varchar(10),StartDate,102) as ProductionDate--,COUNT(AlarmMessage) As OccurancesFROM RPMS.dbo.List_PaintShopAlarms WHERE --Convert(varchar(10),StartDate,102) = @vcProductionDay andConvert(varchar(10),StartDate,102) = Convert(varchar(10),EndDate,102) AND (AlarmMessage LIKE '7FM%' OR AlarmMessage LIKE 'CONV%' OR AlarmMessage LIKE 'EMG%' )) AS x ON x.StartMinute <= v.NumberAND x.EndMinute > v.NumberWHERE v.Type = 'p' AND Number < 1440and (x.ProductionDate BETWEEN Convert(varchar(10),@dtStartDate,102) AND Convert(varchar(10),@dtEndDate,102))group by x.ProductionDate) T2ON T1.ProductionDay = T2.ProductionDayORDER BY Convert(varchar(10),T1.ProductionDay,102) asc |
 |
|
|
|
|
|