Frage : SP ändern, um Gesamtmengen zu erhalten verwiesen gegen AN/AUS-Stunden

Ich verwende das SP und die Funktion unten, um Gesamtmengen von einer datalogger Vorrichtung zurückzubringen, die wachsende Werte jedes 15mins.

Somehow, das ich in dieses SP hinzufügen muss, die Fähigkeit, einen Extraparam zu führen loggt, der „@OccTL“ genannt wird und datachange gegen die Daten vom HistorianDB.DBO.TLData verweist, in dem TLInstance = @OccTL.

The Daten vom @OccTL entweder 1 oder 0 sind. Wenn der Zeitstempel gegen die OccTL Daten überprüft werden muss, wenn der Wert für den gegenwärtigen Zeitstempel 0 ist, wird das datachange auf ein OffHoursTotal, wenn die OccTL Daten 1 sind, das datachange wird belaufen auf OnHoursTotal belaufen. Das Gesamtdaya_data, sollte noch zurückgebracht werden, während es z.Z. ist. So fügen wir gerade 2 Extraspalten für OffHoursTotal hinzu und OnHoursTotal.

I denken, wenn @OccTL als 0 geführt wird, das OffHourTotal und OnHourTotal werden ignoriert, keine historischen Daten war recorded.
einhüllen
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
6:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
USE [EnergySuiteDB]
GEHEN
/****** Gegenstand:  StoredProcedure [dbo]. [GetCostPerPeriod] Index-Datum: 07/31/2010 06:18: 55 ******/
ANSI_NULLS AN EINSTELLEN
GEHEN
QUOTED_IDENTIFIER AN EINSTELLEN
GEHEN
VERFAHREN [dbo] ÄNDERN. [GetCostPerPeriod] @sDate DATUM/UHRZEIT, @Meter varchar (50), @GasRate int, @pf Hin- und Herbewegung, @util varchar (50), @reportselection Putzfrau (1), @co2 Hin- und Herbewegung, @Carbon Hin- und Herbewegung, @calc Hin- und Herbewegung

WIE
ANFANGEN

--Ein Energienfaktor von 0 wirft Ausnahme, also muss dieser um kümmert werden
wenn isnull (@pf, 0) gesetztes @pf =0 = 1

-- erklären und einige Variablen zu gründen, die auf ankommenden Parametern basieren

@PREVVAL NUMERISCHES ERKLÄREN (12, 4)
das numerische @grate erklären (12.4)
@edate Datum/Uhrzeit erklären
@intervals int erklären

@sdate = Bekehrten (Putzfrau (8), @sdate, 112) einstellen   -- sicherstellen, dass Zeit „beim Anfang“ des Zeitraums ist
Wenn @reportselection = „M“ @sdate = DATEADD einstellte (Monat, DATEDIFF (Monat, 0, @sdate), 0)
Wenn @reportselection = „Y“ einstellte @sdate = datename (Jahr, @sdate) + „0101“

@edate = Bekehrten (Putzfrau (8), @sdate, 112) einstellen + „23:59: 59.997“
Wenn @reportselection = „W“ @edate = Bekehrten einstellte (Putzfrau (8), @sdate+6,112) + „23:59: 59.997“
Wenn @reportselection = „M“ @edate = DATEADD einstellte (Monat, DATEDIFF (Monat, -1, @sdate), 0) - 0.00000005
Wenn @reportselection = „Y“ @edate = datename (Jahr, @sdate) + „1231 23:59 einstellte: 59.997“

@intervals = Tag (dateadd (Monat, datediff (Monat, - 1, @sdate), 0) einstellen - 1) 
Wenn @reportselection = „D“ @intervals = @intervals * 96 einstellte  -- 96 Viertelstunden an einem Tag.
Wenn @reportselection = „Y“ @intervals = 1 einstellte

wenn isnull (@gasrate, 0) = 1
   @grate einstellen = 11.0786 -- 1.02264 * 39/3.6
sonst
   @grate einstellen = 1.0

-- unseren Tempreport-Datenauszug von der Hauptgeschichtentabelle jetzt verursachen

WENN OBJECT_ID („tempdb. #ReportData“, „U ") IST NICHT UNGÜLTIGES TROPFEN-TABELLE #ReportData  -- sollte nicht erforderlich sein
 
TABELLE #ReportData VERURSACHEN
(
    Primärschlüssel Identität der Identifikation-int,
    Zeitstempel DATUM/UHRZEIT,
    Hundertstel INT,      
    Daten NUMERISCH (12, 4),
    DataChange NUMERISCH (12, 4),
    DateStamp Datum/Uhrzeit
)

-- unsere Reportdaten bevölkern

IN #ReportData (Zeitstempel, Hundertstel, Daten, Datestamp) EINSETZEN
Zeitstempel, Hundertstel, der Bekehrte (real, Daten) * @grate*@calc, Fall VORWÄHLEN wenn @reportselection = „y-“ dann Bekehrter (Putzfrau (6), Zeitstempel, 112) + sonst Bekehrter ' 01 ', Ende (der Putzfrau (8), Zeitstempel, 112)
VON HistorianDB.dbo.TLData 
WO TLInstance = @Meter 
UND Zeitstempel zwischen @sdate und @edate
UND Type=0 
UND isnumeric (Daten) =1
AUFTRAG DURCH Zeitstempel, recordnumber        

-- jetzt vorbereiten, unsere Daten zu aktualisieren, um den Unterschied zwischen Messinstrumentmesswerten zu berechnen, aber wir benötigen einen Ausgangspunkt…

GESETZTES @PrevVal = isnull ((AUSERWÄHLTER Bekehrter der Oberseite 1 (real, Daten) * @grate
                        VON HistorianDB.dbo.TLData 
                        WO TLInstance = @Meter 
                        UND Zeitstempel < @sdate
                        UND Type=0 
                        UND isnumeric (Daten) =1 
                        AUFTRAG DURCH Zeitstempel desc), 0)

-- das Update tun unsere Daten, um den Unterschied zwischen Messinstrumentmesswerten und Kosten zu berechnen

#reportdata AKTUALISIEREN
DataChange = #reportdata EINSTELLEN. Daten - isnull (prev.data, #reportdata. Daten)
Vom #ReportData 
linke äußere schließen sich #reportdata prev auf #reportdata.id - 1 = prev.id an

-- auf Gebühren der negativen Zahlen jetzt überprüfen, um Zurückstellen (oder die verfälschung) zu messen

#reportdata GESETZTES DataChange AKTUALISIEREN = 0 WO DataChange < 0


-- jetzt können wir den Report laufen lassen

; Mit Zeiträumen wie
(
   Fall wenn @reportselection = „D“ dann dateadd (Minute, Nr. * 15, @sdate) sonst Fall wenn @reportselection = „Y“ dann dateadd (Monat, Zahl, @sdate) sonst dateadd (Tag, Zahl, @sdate) Endenende als PSDate vorwählen 
   , Fall, wenn @reportselection = „D“ dann dateadd (Minute, Nr. * 15 + 15, @sdate) - 0.00000005 sonst Fall, wenn @reportselection = „Y“ dann DATEADD (Monat, DATEDIFF (Monat, -1, dateadd (Monat, Zahl, @sdate)), 0) - 0.00000005 sonst Bekehrter (Putzfrau (8), @sdate+number, 112) + „23:59: “ Ende des Endes 59.997, wie PEDate 
   , Fall, wenn @reportselection = „D“ dann gelassen (datename (dw, @sdate), 03) + ' „+ Bekehrter (Putzfrau (8), @sdate, 03) +right (Bekehrter (Putzfrau (19), dateadd (Minute, Nr. * 15, @sdate), 100), 8) sonst Fall, als @reportselection = „Y“ dann verließ (datename (Monat, dateadd (Monat, Zahl, @sdate)), 3) +“ „+ verließ datename (Jahr, @sdate) sonst (datename (dw, dateadd (Tag, Zahl, @sdate)), 3) +“ '+ Endenende des Bekehrten (Putzfrau (8), dateadd (Tag, Zahl, @sdate), 03) als PSName 
   , Fall wenn @reportselection = „d-“ sonst Fall dann 1.0/96.0 wenn @reportselection („M“, „W ") dann im sonst Endenende des Tag 1.0 (dateadd (Monat, number+datediff (Monat, -1, @sdate), 0) - 1) als dayparts
   vom Meister. .spt_values n mit (nolock) 
   wo Art = „p“
   und Fall wenn @reportselection = „D“ dann dateadd (Minute, Nr. * 15, @sdate) sonst Fall wenn @reportselection = „Y“ dann dateadd (Monat, Zahl, @sdate) sonst dateadd (Tag, Zahl, @sdate) Endenende < @edate
)
AUSERWÄHLT 
    PSname als Datum,
    SUMME (isnull (r1.datachange, 0)) ALS day_data,
    SUMME (isnull (r1.datachange, 0))*@CO2 ALS CO2_data,
    SUMME (isnull (r1.datachange, 0))*@Carbon ALS Carbon_data,
    SUMME (isnull (r1.datachange, 0) *chargerate) ALS DataCost,
    SUMME (isnull (r1.datachange, 0) *levy) als TotalLevy,
    maximales (Fall, wenn r1.datestamp ungültiges dann 0 sonst caprate Ende ist),/@intervals als TotalCap,                           
    maximal (Fall, wenn r1.datestamp ungültiges dann 0 sonst chargecap Ende ist), als ChargeCap,
    maximal (Fall, wenn r1.datestamp ungültiges dann 0 sonst dayparts * StandingDayCharge Ende ist), als StandingDayCharge,
    maximal (Fall, wenn r1.datestamp ungültiges dann 0 sonst dayparts * StandingDayCharge Ende ist) 
    + SUMME (isnull (r1.datachange, 0) * (chargerate + Steuer)) 
    + maximale (Fall, wenn r1.datestamp ungültiges dann 0 sonst caprate Ende ist),/@intervals als TotalCost,
    isnull (((Fall, wenn @reportselection = „d-“ dann SUMME (isnull (r1.datachange, 0)) sonst (auserwähltes Oberseite 1 datachange vom #reportdata r2, wo r2.datestamp = r1.datestamp Auftrag durch r2.datachange desc) Ende) *4)/@pf, 0) als MaxkVA,
    isnull (((Fall, wenn @reportselection = „d-“ dann SUMME (isnull (r1.datachange, 0)) sonst (auserwähltes Oberseite 1 datachange vom #reportdata r2, wo r2.datestamp = r1.datestamp Auftrag durch r2.datachange desc) Ende) *4), 0) als MaxkW,
    (auserwählter Zeitstempel der Oberseite 1 vom #reportdata r2 wo r2.datestamp = r1.datestamp Auftrag durch r2.datachange desc, r2.timestamp desc) als MaxDataChangeTimeStamp
 
Von den Zeiträumen
LINKE ÄUSSERE VERBINDEN #ReportData r1 auf r1.timestamp zwischen psdate und pedate
Kreuz wenden dbo.udf_getrates_3 an (r1.Timestamp, @util)    
GRUPPE DURCH PSname, r1.datestamp, PSdate
AUFTRAG DURCH PSdate
ENDE


----------------------------------------------

VERWENDEN [EnergySuiteDB]
GEHEN
/****** Gegenstand:  UserDefinedFunction [dbo]. [udf_getrates_3] Index-Datum: 07/31/2010 06:19: 11 ******/
ANSI_NULLS AN EINSTELLEN
GEHEN
QUOTED_IDENTIFIER AN EINSTELLEN
GEHEN
FUNKTION [dbo] ÄNDERN. [udf_getrates_3] (@date Datum/Uhrzeit, @util varchar (50))
BRINGT @tbl Tabelle zurück (chargerate GELD, Steuer GELD, caprate GELD, ChargeCap Hin- und Herbewegung, StandingDayCharge Geld)
WIE
ANFANGEN


  @dw Putzfrau erklären (1)
  @dw einstellen = verließ (DATENAME (DW, @date), 1)

  @hr int erklären
  @hr = datepart (Stunde, @date) einstellen

  @tbl einsetzen 
  Oberseite 1 vorwählen --EffectiveStartDate, EffectiveEndDate, 
         FALL, WENN @dw = „S“ und ((@hr zwischen datepart (Stunde, weekenddaystart) und datepart (Stunde, weekenddayend) und isnull (weekenddaycost, 0) <> 0)
                                  oder (@hr NICHT zwischen datepart (Stunde, weekenddaystart) und datepart (Stunde, weekenddayend) und isnull (weekendnightcost, 0) <> 0))
              DANN
                     FALL, WENN @hr zwischen datepart (Stunde, weekenddaystart) und datepart (Stunde, weekenddayend)
                          DANN weekenddaycost
                          SONST weekendnightcost
                     ENDE
              SONST 
                     FALL, WENN @hr zwischen datepart (Stunde, weekdaystart) und datepart (Stunde, weekdayend)
                          DANN weekdaycost
                          SONST weeknightcost
                     ENDE
         ENDE, climateChangeLevyRate, ((chargeablecapacity*capacityrate)), chargeablecapacity, isnull (StandingDayCharge, 0)
  VON EnergySuiteDB.dbo.Rates
  wo UtilityName=@util 
  UND @date zwischen EffectiveStartDate und EffectiveEndDate 
  Auftrag durch Identifikation desc    -- die „letzte“ Reihe erhalten, die das erbetene Datum umfaßt.

  wenn @@rowcount = 0
     @tbl einsetzen 
     Oberseite 1 vorwählen --EffectiveStartDate, EffectiveEndDate, 
         FALL, WENN @dw = „S“ und ((@hr zwischen datepart (Stunde, weekenddaystart) und datepart (Stunde, weekenddayend) und isnull (weekenddaycost, 0) <> 0)
                                  oder (@hr NICHT zwischen datepart (Stunde, weekenddaystart) und datepart (Stunde, weekenddayend) und isnull (weekendnightcost, 0) <> 0))
              DANN
                     FALL, WENN @hr zwischen datepart (Stunde, weekenddaystart) und datepart (Stunde, weekenddayend)
                          DANN weekenddaycost
                          SONST weekendnightcost
                     ENDE
              SONST 
                     FALL, WENN @hr zwischen datepart (Stunde, weekdaystart) und datepart (Stunde, weekdayend)
                          DANN weekdaycost
                          SONST weeknightcost
                     ENDE
         ENDE, climateChangeLevyRate, ((chargeablecapacity*capacityrate)), chargeablecapacity, isnull (StandingDayCharge, 0)
     VON EnergySuiteDB.dbo.Rates
     wo UtilityName=@util 
     Auftrag durch EffectiveEndDate desc   -- höchstes enddate gehört, „die 1“ alle Bedeckung/die Forderungsausfallquote zu rudern.
  Rückkehr 
ENDE

Antwort : SP ändern, um Gesamtmengen zu erhalten verwiesen gegen AN/AUS-Stunden

Möglicherweise ist es die Div., die Sachen abwirft.  Auf einer Webseite steht nichts selbst wirklich bereit.  Haben Sie vor und nach Schirmschüssen?  Eine Verbindung, die wir betrachten können?
Weitere Lösungen  
 
programming4us programming4us