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
|