(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:
36:
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:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
|
USE [EnergySuiteDB]
IŚĆ
/****** Przedmiot: StoredProcedure [dbo]. [GetCostPerPeriod] Pismo Data: 07/09/2010 15:32: 24 ******/
SET ANSI_NULLS DALEJ
IŚĆ
USTAWIAĆ QUOTED_IDENTIFIER DALEJ
IŚĆ
ZMIENIAĆ PROCEDURA [dbo]. [GetCostPerPeriod] @sDate DATETIME, @Meter varchar (50), @GasRate int, @pf pławik, @util varchar (50), @reportselection char (1), @co2 pławik, @Carbon pławik
ZACZYNAĆ
--Władza czynnik (0) rzucać wyjątek, więc (0) potrzeba brać opieka
jeżeli isnull (@pf, (0)) =0 ustalony @pf = (1)
-- oznajmiać i tworzyć niektóre zmienna opierać się na przybywający parametr
OZNAJMIAĆ @PREVVAL NUMERYK (12, 4)
oznajmiać @grate numeryk (12,4)
oznajmiać @edate datetime
oznajmiać @intervals int
ustawiać @sdate = konwertyta (char (8), @sdate, 112) -- upewniać się czas być przy "początek" okres
Jeżeli @reportselection = "M" set @sdate = DATEADD (miesiąc, DATEDIFF (miesiąc, (0), @sdate), (0))
Jeżeli @reportselection = "Y" set @sdate = datename (rok, @sdate) + "0101"
ustawiać @edate = konwertyta (char (8), @sdate, 112) + "23:59: 59.997"
Jeżeli @reportselection = "W" set @edate = konwertyta (char (8), @sdate+6,112) + "23:59: 59.997"
Jeżeli @reportselection = "M" set @edate = DATEADD (miesiąc, DATEDIFF (miesiąc, -1, @sdate), (0)) - 0.00000005
Jeżeli @reportselection = "Y" set @edate = datename (rok, @sdate) + "1231 23:59: 59.997"
ustawiać @intervals = dzień (dateadd (miesiąc, datediff (miesiąc, - (1), @sdate), (0)) - 1)
Jeżeli @reportselection = "D" set @intervals = @intervals * 96 -- 96 kwartalny godzina w dzień.
Jeżeli @reportselection = "Y" set @intervals = (1)
jeżeli isnull (@gasrate, (0)) = (1)
ustawiać @grate = 11.0786 -- 1.02264 * 39/3.6
inny
ustawiać @grate = 1.0
-- teraz tworzyć nasz zastępca raport dane ekstrakt od główny historia stół
JEŻELI OBJECT_ID ("tempdb. #REPORTDATA", "U ") BYĆ NIEOBOWIĄZUJĄCY KROPLA STÓŁ #REPORTDATA -- musieć potrzebować
TWORZYĆ STOŁOWY #REPORTDATA
(
ID int tożsamość początkowy klucz,
TimeStamp DATETIME,
Hundredths INT,
Dane NUMERYK (12, 4),
DataChange NUMERYK (12, 4),
DateStamp datetime
)
-- zaludniać nasz raportowy dane
WSZYWKA W #ReportData (Timestamp, Hundredths, Dane, Datestamp)
WYBRANY Timestamp, Hundredths, konwertyta (real, Dane) * @grate, skrzynka gdy @reportselection = "Y" wtedy konwertyta (char (6), timestamp, 112) + ' 01 ' inny konwertyta (char (8), timestamp, 112) końcówka
OD HistorianDB.dbo.TLData
DOKĄD TLInstance = @Meter
I timestamp między @sdate i @edate
I Type=0
I isnumeric (dane) =1
ROZKAZ Timestamp, recordnumber
-- teraz przygotowywać nasz dane the różnica między metrowy czytanie, ale my potrzebować baza wypadowa…
USTALONY @PrevVal = isnull ((WYBRANY wierzchołek (1) konwertyta (real, Dane) * @grate
OD HistorianDB.dbo.TLData
DOKĄD TLInstance = @Meter
I timestamp < @sdate
I Type=0
I isnumeric (dane) =1
ROZKAZ Timestamp desc), (0))
-- robić the aktualizacja nasz dane the różnica między metrowy czytanie i koszt
AKTUALIZOWAĆ #reportdata
USTAWIAĆ DataChange = #reportdata. Dane - isnull (prev.data, @prevval)
OD #ReportData
lewy zewnętrzny łączyć #reportdata prev na #reportdata.id - (1) = prev.id
-- teraz my móc the raport
; Z Okres
(
Wybrany skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15, @sdate) inny skrzynka gdy @reportselection = "Y" wtedy dateadd (miesiąc, liczba, @sdate) inny dateadd (dzień, liczba, @sdate) końcówka końcówka jako PSDate
, skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15 + 15, @sdate) - 0.00000005 inny skrzynka gdy @reportselection = "Y" wtedy DATEADD (miesiąc, DATEDIFF (miesiąc, -1, dateadd (miesiąc, liczba, @sdate)), (0)) - 0.00000005 inny konwertyta (char (8), @sdate+number, 112) + "23:59: 59.997" końcówka końcówka 59.997
, skrzynka gdy @reportselection = "D" wtedy opuszczać (datename (dw, @sdate), 03) +''+ konwertyta (char (8), @sdate, 03) +right (konwertyta (char (19), dateadd (minuta, liczba * 15, @sdate), 100), 8) inny skrzynka gdy @reportselection = "Y" wtedy opuszczać (datename (miesiąc, dateadd (miesiąc, liczba, @sdate)), 3) + '' + datename (rok, @sdate) inny lewica (datename (dw, dateadd (dzień, liczba, @sdate)), 3) + '' + konwertyta (char (8), dateadd (dzień, liczba, @sdate), 03) końcówka końcówka jako PSName
, skrzynka gdy @reportselection = "D" wtedy 1.0/96.0 inny skrzynka gdy @reportselection w ("M", "W ") wtedy 1.0 inny dzień (dateadd (miesiąc, number+datediff (miesiąc, -1, @sdate), (0)) - 1) końcówka końcówka jako dayparts
od mistrz. .spt_values n z (nolock)
dokąd typ = "p"
i skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15, @sdate) inny skrzynka gdy @reportselection = "Y" wtedy dateadd (miesiąc, liczba, @sdate) inny dateadd (dzień, liczba, @sdate) końcówka końcówka < @edate
)
WYBIÓRKA
PSname jako Data,
SUMA (isnull (r1.datachange, (0))) JAKO day_data,
SUMA (isnull (r1.datachange, (0)))*@CO2 JAKO CO2_data,
SUMA (isnull (r1.datachange, (0)))*@Carbon JAKO Carbon_data,
SUMA (isnull (r1.datachange, (0)) *chargerate) JAKO DataCost,
SUMA (isnull (r1.datachange, (0)) *levy) jako TotalLevy,
totalCap (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny caprate końcówka)/@intervals jako TotalCap,
chargeCap (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny chargecap końcówka) jako ChargeCap,
standingDayCharge (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny dayparts * StandingDayCharge końcówka) jako StandingDayCharge,
końcówka (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny dayparts * StandingDayCharge końcówka)
+ SUMA (isnull (r1.datachange, (0)) * (chargerate + pobór))
+ totalCost (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny caprate końcówka)/@intervals jako TotalCost,
isnull (((skrzynka gdy @reportselection = "D" wtedy SUMA (isnull (r1.datachange, (0))) inny (wybrany wierzchołek (1) datachange od #reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc) końcówka) *4)/@pf, (0)) jako MaxkVA,
isnull (((skrzynka gdy @reportselection = "D" wtedy SUMA (isnull (r1.datachange, (0))) inny (wybrany wierzchołek (1) datachange od #reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc) końcówka) *4), (0)) jako MaxkW,
(wybrany wierzchołek (1) timestamp od #reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc, r2.timestamp desc) jako MaxDataChangeTimeStamp
OD Okres
LEWY ZEWNĘTRZNY ŁĄCZYĆ #ReportData r1 na r1.timestamp między psdate i pedate
krzyż stosować dbo.udf_getrates_3 (r1.Timestamp, @util)
GRUPA PSname, r1.datestamp, PSdate
ROZKAZ PSdate
KOŃCÓWKA
---------------------------------------------------------------------------
UŻYWAĆ [EnergySuiteDB]
IŚĆ
/****** Przedmiot: StoredProcedure [dbo]. [GetCostPerPeriod_Virtual] Pismo Data: 07/09/2010 15:32: 51 ******/
SET ANSI_NULLS DALEJ
IŚĆ
USTAWIAĆ QUOTED_IDENTIFIER DALEJ
IŚĆ
ZMIENIAĆ PROCEDURA [dbo]. [GetCostPerPeriod_Virtual] @sDate DATETIME, @Meter varchar (1000), @calc varchar (1000), @operator varchar (1000), @GasRate int, @pf pławik, @util varchar (50), @reportselection char (1), @CO2 pławik, @Carbon pławik
ZACZYNAĆ
--Władza czynnik (0) rzucać wyjątek, więc (0) potrzeba brać opieka
jeżeli isnull (@pf, (0)) =0 ustalony @pf = (1)
-- oznajmiać i tworzyć niektóre zmienna opierać się na przybywający parametr
OZNAJMIAĆ @PREVVAL NUMERYK (12, 4)
oznajmiać @grate varchar (12) --numeryk (12,4)
oznajmiać @edate datetime
oznajmiać @intervals int
oznajmiać @str_sdate varchar (20)
oznajmiać @str_edate varchar (20)
ustawiać @sdate = konwertyta (char (8), @sdate, 112) -- upewniać się czas być przy "początek" okres
Jeżeli @reportselection = "M" set @sdate = DATEADD (miesiąc, DATEDIFF (miesiąc, (0), @sdate), (0))
Jeżeli @reportselection = "Y" set @sdate = datename (rok, @sdate) + "0101"
ustawiać @edate = konwertyta (char (8), @sdate, 112) + "23:59: 59.997"
Jeżeli @reportselection = "W" set @edate = konwertyta (char (8), @sdate+6,112) + "23:59: 59.997"
Jeżeli @reportselection = "M" set @edate = DATEADD (miesiąc, DATEDIFF (miesiąc, -1, @sdate), (0)) - 0.00000005
Jeżeli @reportselection = "Y" set @edate = datename (rok, @sdate) + "1231 23:59: 59.997"
ustawiać @str_sdate = konwertyta (varchar, @sdate - 1,120)
ustawiać @str_edate = konwertyta (varchar, @edate, 120)
ustawiać @intervals = dzień (dateadd (miesiąc, datediff (miesiąc, - (1), @sdate), (0)) - 1)
Jeżeli @reportselection = "D" set @intervals = @intervals * 96 -- 96 kwartalny godzina w dzień.
Jeżeli @reportselection = "Y" set @intervals = (1)
jeżeli isnull (@gasrate, (0)) = (1)
ustawiać @grate = "11.0786" -- 1.02264 * 39/3.6
inny
ustawiać @grate = "1.0"
-- teraz tworzyć nasz zastępca raport dane ekstrakt od główny historia stół
JEŻELI OBJECT_ID ("tempdb. #REPORTDATA", "U ") BYĆ NIEOBOWIĄZUJĄCY KROPLA STÓŁ #REPORTDATA -- musieć potrzebować
TWORZYĆ STOŁOWY #REPORTDATA
(
ID int tożsamość początkowy klucz,
TLInstance int,
TimeStamp DATETIME,
Hundredths INT,
Dane NUMERYK (12, 4),
DataChange NUMERYK (12, 4),
DateStamp datetime
)
-- zaludniać nasz raportowy dane
WSZYWKA W #ReportData (Timestamp, tlinstance, Hundredths, Dane, Datestamp)
exec ('WYBRANY Timestamp, tlinstance, Hundredths, konwertyta (real, Dane) * "+@grate+", skrzynka gdy ''' +@reportselection+ ''' = '' Y '' wtedy konwertyta (char (6), timestamp, 112) + '' 01 '' inny konwertyta (char (8), timestamp, 112) końcówka
OD HistorianDB.dbo.TLData
DOKĄD TLInstance w ("+@Meter+")
I timestamp między ''' +@str_sdate+ ''' i ''' +@str_edate+ '''
I Type=0
I isnumeric (dane) =1
ROZKAZ Tlinstance, timestamp, recordnumber')
-- robić the aktualizacja nasz dane the różnica między metrowy czytanie i koszt
AKTUALIZOWAĆ #reportdata
USTAWIAĆ DataChange = #reportdata. Dane - isnull (prev.data, 0.00)
OD #ReportData
lewy zewnętrzny łączyć #reportdata prev na #reportdata.tlinstance = prev.tlinstance i #reportdata.id - (1) = prev.id
dokąd #reportdata.timestamp między @sdate i @edate
-- teraz my mieć the datachange my móc teraz @operations i @calc
jeżeli object_id ("tempdb. #tmp_meter", "U ") być nieobowiązujący kropla stół #tmp_meter
jeżeli object_id ("tempdb. #tmp_operator", "U ") być nieobowiązujący kropla stół #tmp_operator
jeżeli object_id ("tempdb. #tmp_calc", "U ") być nieobowiązujący kropla stół #tmp_calc
wybrany tożsamość (int, 1,1) gdy id, substring (@meter, liczba, charindex (",", @meter+', ', liczba) - liczba) metr
w #tmp_meter
od (wybrany @meter jako metr) m
krzyż łączyć (wybrany liczba od mistrz. .spt_values dokąd typ = "p ") n
dokąd substring (", "+@meter, liczba, 1) =","
i numerowy <= len (@meter)
wybrany tożsamość (int, 1,1) gdy id, substring (@operator, liczba, charindex (",", @operator+', ', liczba) - liczba) jako operator
w #tmp_operator
od (wybrany @operator jako operator) m
krzyż łączyć (wybrany liczba od mistrz. .spt_values dokąd typ = "p ") n
dokąd substring (", "+@operator, liczba, 1) =","
i numerowy <= len (@operator)
wybrany tożsamość (int, 1,1) gdy id, substring (@calc, liczba, charindex (",", @calc+', ', liczba) - liczba) jako calc
w #tmp_calc
od (wybrany @calc jako calcs) m
krzyż łączyć (wybrany liczba od mistrz. .spt_values dokąd typ = "p ") n
dokąd substring (", "+@calc, liczba, 1) =","
i numerowy <= len (@calc)
oznajmiać @parse varchar (4000)
wybierać @parse = isnull (@parse+'', '') + operator +" (skrzynka gdy ''' +operator+ ''' wewnątrz ('' * '', ''/'') i isnull (["+ metr +"], (0)) = (0) wtedy (1) inny isnull (["+ metr +"], (0)) end' + "*" + calc + ")"
od #tmp_meter m
wewnętrzny łączyć #tmp_calc c na m.id = c.id
wewnętrzny łączyć #tmp_operator o na m.id = o.id
oznajmiać @columns varchar (2000)
wybierać @columns = isnull (@columns+', ", '') +" ["+ metr +"] '
od #tmp_meter m
wewnętrzny łączyć #tmp_calc c na m.id = c.id
wewnętrzny łączyć #tmp_operator o na m.id = o.id
grupa metr
jeżeli object_id ("tempdb. #tmp_reportdata", "U ") być nieobowiązujący kropla stół #tmp_reportdata
tworzyć stołowy #tmp_reportdata (timestamp datetime, datestamp datetime, datachange decimal (12,4))
wkładać #tmp_reportdata
exec ("wybrany timestamp, datestamp, konwertyta (decimal (12,4), (0) ' +@parse+") jako datachange od
(wybrany timestamp, datestamp, tlinstance, konwertyta (decimal (12,4), datachange) jako datachange od #reportdata) src
PIVOT
(suma (datachange) dla tlinstance w ("+@columns+")) pvt')
-- teraz my móc the raport
; Z Okres
(
Wybrany skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15, @sdate) inny skrzynka gdy @reportselection = "Y" wtedy dateadd (miesiąc, liczba, @sdate) inny dateadd (dzień, liczba, @sdate) końcówka końcówka jako PSDate
, skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15 + 15, @sdate) - 0.00000005 inny skrzynka gdy @reportselection = "Y" wtedy DATEADD (miesiąc, DATEDIFF (miesiąc, -1, dateadd (miesiąc, liczba, @sdate)), (0)) - 0.00000005 inny konwertyta (char (8), @sdate+number, 112) + "23:59: 59.997" końcówka końcówka 59.997
, skrzynka gdy @reportselection = "D" wtedy opuszczać (datename (dw, @sdate), 03) +''+ konwertyta (char (8), @sdate, 03) +right (konwertyta (char (19), dateadd (minuta, liczba * 15, @sdate), 100), 8) inny skrzynka gdy @reportselection = "Y" wtedy opuszczać (datename (miesiąc, dateadd (miesiąc, liczba, @sdate)), 3) + '' + datename (rok, @sdate) inny lewica (datename (dw, dateadd (dzień, liczba, @sdate)), 3) + '' + konwertyta (char (8), dateadd (dzień, liczba, @sdate), 03) końcówka końcówka jako PSName
, skrzynka gdy @reportselection = "D" wtedy 1.0/96.0 inny skrzynka gdy @reportselection w ("M", "W ") wtedy 1.0 inny dzień (dateadd (miesiąc, number+datediff (miesiąc, -1, @sdate), (0)) - 1) końcówka końcówka jako dayparts
od mistrz. .spt_values n z (nolock)
dokąd typ = "p"
i skrzynka gdy @reportselection = "D" wtedy dateadd (minuta, liczba * 15, @sdate) inny skrzynka gdy @reportselection = "Y" wtedy dateadd (miesiąc, liczba, @sdate) inny dateadd (dzień, liczba, @sdate) końcówka końcówka < @edate
)
WYBIÓRKA
PSname jako Data,
SUMA (isnull (r1.datachange, (0))) JAKO day_data,
SUMA (isnull (r1.datachange, (0)) *@CO2) JAKO CO2_data,
SUMA (isnull (r1.datachange, (0)) *@Carbon) JAKO Carbon_data,
SUMA (isnull (r1.datachange, (0)) *chargerate) JAKO DataCost,
SUMA (isnull (r1.datachange, (0)) *levy) jako TotalLevy,
totalCap (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny caprate końcówka)/@intervals jako TotalCap,
chargeCap (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny chargecap końcówka) jako ChargeCap,
standingDayCharge (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny dayparts * StandingDayCharge końcówka) jako StandingDayCharge,
końcówka (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny dayparts * StandingDayCharge końcówka)
+ SUMA (isnull (r1.datachange, (0)) * (chargerate + pobór))
+ totalCost (skrzynka gdy r1.datestamp być nieobowiązujący wtedy (0) inny caprate końcówka)/@intervals jako TotalCost,
isnull (((skrzynka gdy @reportselection = "D" wtedy SUMA (isnull (r1.datachange, (0))) inny (wybrany wierzchołek (1) datachange od #tmp_reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc) końcówka) *4)/@pf, (0)) jako MaxkVA,
isnull (((skrzynka gdy @reportselection = "D" wtedy SUMA (isnull (r1.datachange, (0))) inny (wybrany wierzchołek (1) datachange od #tmp_reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc) końcówka) *4), (0)) jako MaxkW,
(wybrany wierzchołek (1) timestamp od #tmp_reportdata r2 dokąd r2.datestamp = r1.datestamp rozkaz r2.datachange desc, r2.timestamp desc) jako MaxDataChangeTimeStamp
OD Okres
LEWY ZEWNĘTRZNY ŁĄCZYĆ #tmp_ReportData r1 na r1.timestamp między psdate i pedate
krzyż stosować dbo.udf_getrates_3 (r1.Timestamp, @util)
GRUPA PSname, r1.datestamp, PSdate
ROZKAZ PSdate
KOŃCÓWKA
|