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:
|
USE [EnergySuiteDB]
GEHEN
/****** Gegenstand: StoredProcedure [dbo]. [GetCostPerPeriod_Virtual] Index-Datum: 07/31/2010 21:53: 41 ******/
ANSI_NULLS AN EINSTELLEN
GEHEN
QUOTED_IDENTIFIER AN EINSTELLEN
GEHEN
VERFAHREN [dbo] ÄNDERN. [GetCostPerPeriod_Virtual] @sDate DATUM/UHRZEIT, @Meter varchar (1000), @calc varchar (1000), @operator varchar (1000), @GasRate int, @pf Hin- und Herbewegung, @util varchar (50), @reportselection Putzfrau (1), @CO2 Hin- und Herbewegung, @Carbon 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 varchar @grate erklären (12) --numerisch (12.4)
@edate Datum/Uhrzeit erklären
@intervals int erklären
das varchar @str_sdate erklären (20)
das varchar @str_edate erklären (20)
@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“
das @str_sdate = Bekehrten (varchar, @sdate einstellen - 1.120)
das @str_edate = Bekehrten (varchar, @edate, 120) einstellen
@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,
TLInstance int,
Zeitstempel DATUM/UHRZEIT,
Hundertstel INT,
Daten NUMERISCH (12, 4),
DataChange NUMERISCH (12, 4),
DateStamp Datum/Uhrzeit
)
-- unsere Reportdaten bevölkern
IN #ReportData (Zeitstempel, tlinstance, Hundertstel, Daten, Datestamp) EINSETZEN
exec ('AUSERWÄHLTER Zeitstempel, tlinstance, Hundertstel, Bekehrter (real, Daten) * „+@grate+“, Fall wenn ''' +@reportselection+ ''' = '' y-'' dann Bekehrter (Putzfrau (6), Zeitstempel, 112) + sonst Bekehrter '' 01 '', Ende (der Putzfrau (8), Zeitstempel, 112)
VON HistorianDB.dbo.TLData
WO TLInstance innen („+@Meter+")
UND Zeitstempel zwischen ''' +@str_sdate+ ''' und ''' +@str_edate+ '''
UND Type=0
UND isnumeric (Daten) =1
AUFTRAG DURCH tlinstance, Zeitstempel, recordnumber')
-- 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.tlinstance = prev.tlinstance und #reportdata.id - 1 = prev.id an
wo #reportdata.timestamp zwischen @sdate und @edate
-- 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 haben wir das datachange, das wir @operations und @calc jetzt betrachten können
wenn object_id („tempdb. #tmp_meter“, „U ") ist nicht ungültiges Tropfentabelle #tmp_meter
wenn object_id („tempdb. #tmp_operator“, „U ") ist nicht ungültiges Tropfentabelle #tmp_operator
wenn object_id („tempdb. #tmp_calc“, „U ") ist nicht ungültiges Tropfentabelle #tmp_calc
Identität (int, 1.1) wie Identifikation, Teilkette (@meter, Zahl, charindex („,“, @meter+', ', Zahl) - Zahl) als Messinstrument vorwählen
in #tmp_meter
von (@meter als Messinstrumente vorwählen), m
Kreuz schließen sich (auserwählte Zahl vom Meister. .spt_values wo Art = „p ") n an
wo Teilkette („, „+@meter, Zahl, 1) =“,“
und Zahl <= len (@meter)
Identität (int, 1.1) wie Identifikation, Teilkette (@operator, Zahl, charindex („,“, @operator+', ', Zahl) - Zahl) als Operator vorwählen
in #tmp_operator
von (@operator als Operatoren vorwählen), m
Kreuz schließen sich (auserwählte Zahl vom Meister. .spt_values wo Art = „p ") n an
wo Teilkette („, „+@operator, Zahl, 1) =“,“
und Zahl <= len (@operator)
Identität (int, 1.1) wie Identifikation, Teilkette (@calc, Zahl, charindex („,“, @calc+', ', Zahl) - Zahl) als calc vorwählen
in #tmp_calc
von (@calc als calcs vorwählen), m
Kreuz schließen sich (auserwählte Zahl vom Meister. .spt_values wo Art = „p ") n an
wo Teilkette („, „+@calc, Zahl, 1) =“,“
und Zahl <= len (@calc)
das varchar @parse erklären (4000)
@parse vorwählen = isnull (@parse+' „,“ ") + Operator +“ (Fall, wenn ''' +operator+ ''' innen ('' * '', ''/'') und isnull ([„+ Messinstrument +“], 0) = 0 dann 1 sonst isnull ([„+ Messinstrument +“], 0) end + „*“ + calc + ")“
von #tmp_meter m
inner #tmp_calc c auf sich anschließen m.id = c.id
inner #tmp_operator O auf verbinden m.id = o.id
die varchar @columns erklären (2000)
@columns = isnull (@columns+', „, '') vorwählen +“ [„+ Messinstrument +“] '
von #tmp_meter m
inner #tmp_calc c auf sich anschließen m.id = c.id
inner #tmp_operator O auf verbinden m.id = o.id
Gruppe durch Messinstrument
wenn object_id („tempdb. #tmp_reportdata“, „U ") ist nicht ungültiges Tropfentabelle #tmp_reportdata
Tabelle #tmp_reportdata (Zeitstempeldatum/uhrzeit, datestamp Datum/Uhrzeit, datachange Dezimalstrich (12.4) verursachen)
#tmp_reportdata einsetzen
exec („auserwählter Zeitstempel, datestamp, Bekehrter (Dezimalstrich (12.4), 0 ' +@parse+") als datachange von
(auserwählter Zeitstempel, datestamp, tlinstance, Bekehrter (Dezimalstrich (12.4), datachange) als datachange #reportdata) vom src
GELENK
(Summe (datachange) für tlinstance („+@columns+")) im pvt')
-- 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, als @reportselection = „D“ dann (datename (dw, @sdate), 03) + ' „+ Bekehrter verließ (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 #tmp_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 #tmp_reportdata r2, wo r2.datestamp = r1.datestamp Auftrag durch r2.datachange desc) Ende) *4), 0) als MaxkW,
(auserwählter Zeitstempel der Oberseite 1 vom #tmp_reportdata r2 wo r2.datestamp = r1.datestamp Auftrag durch r2.datachange desc, r2.timestamp desc) als MaxDataChangeTimeStamp
Von den Zeiträumen
LINKE ÄUSSERE VERBINDEN #tmp_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
|