1

15 分のスロットでデータ テーブルのデータを取得するには、クエリが必要です。値が存在する場合は、テーブルにある値をそのまま返すか、null を返す必要があります。どうやってするの

私は次のようにクエリを書きました:

 with mycte as
  (
   select cast('2011-06-12 00:00:00' as datetime) DateValue 
   union all 
   select dateadd(minute,15,DateValue) 
   from mycte 
   where  dateadd(minute,15,DateValue) <= '2011-06-12 23:59:00'
   ) 
   select datetime,feederid,VR,VY,VB,IR,IY,IB,KW,KVA,KVAR,PF1,PF2,PF3,PF 
   from pseb.dbo.datasource, (
                              select meterid,DateValue 
                              from  mycte,pseb.dbo.METERMASTER 
                              )a 
   where CONVERT(datetime,datetime) >= DateValue 
     and CONVERT(datetime,DATETIME) < dateadd(minute,15,DateValue) 
     and feederid=a.MeterID 
   option (maxrecursion 32767)

ただし、テーブルに存在する値のみを返します。私がそれをするのを手伝ってください..

4

1 に答える 1

1

LEFT JOINを使用する必要があります

;with mycte as
  (
   select cast('2011-06-12 00:00:00' as datetime) AS BeginDateValue, 
          dateadd(minute, 15, '2011-06-12 00:00:00') AS EndDateValue
   union all 
   select dateadd(minute, 15, BeginDateValue), 
          dateadd(minute, 15, EndDateValue)
   from mycte 
   where  dateadd(minute, 15, BeginDateValue) <= '2011-06-12 23:59:00'
   )
   SELECT [datetime], feederid, VR,VY,VB,IR,IY,IB,KW,KVA,KVAR,PF1,PF2,PF3,PF
   FROM mycte mc LEFT JOIN pseb.dbo.datasource d 
                   ON CONVERT(datetime, [datetime]) >= BeginDateValue 
                     and CONVERT(datetime, [DATETIME]) < EndDateValue
                 LEFT JOIN pseb.dbo.METERMASTER m ON d.feederid = m.MeterID
于 2013-02-15T12:00:10.063 に答える