Frage : SP ändern, um Tag der Gradverleihunggesamtmenge für jeden Monat zurückzubringen

Ich muss die Anlage im SP unten hinzufügen, das, wenn, das AvgOAT für jeden Tag genommen und in der Formel verwendet:

Daily DegreeDays=Max (AvgOAT-15.5, 0)

For ein Jahrreport, die Monatsgesamtmengen von Degreedays sollte, für alle weiteren Reports zurückgebracht werden, Tage zurückgegangen irgendwie, so nnot soviel eines issue.
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:
USE [EnergySuiteDB]
GEHEN
/****** Gegenstand:  StoredProcedure [dbo]. [GetCostPerPeriod] Index-Datum: 08/14/2010 19:40: 14 ******/
ANSI_NULLS AN EINSTELLEN
GEHEN
QUOTED_IDENTIFIER AN EINSTELLEN
GEHEN
VERFAHREN [dbo] ÄNDERN. [GetCostPerPeriod] @sDate DATUM/UHRZEIT, @Meter int, @GasRate int, @pf Hin- und Herbewegung, @util varchar (50), @reportselection Putzfrau (1), @co2 Hin- und Herbewegung, @Carbon Hin- und Herbewegung, @calc Hin- und Herbewegung, @occtl int, @oattl int, @Spacetl int

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,
    Inanspruchnahme int,
    HAFER numerisch (12.4),
    SpaceTemp numerisch (12.4)

)

-- unsere Reportdaten bevölkern

IN #ReportData (Zeitstempel, Hundertstel, Daten, Datestamp, Inanspruchnahme, HAFER, SpaceTemp) 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)
       , Fall, wenn @occtl = 0 dann 2 sonst (AUSERWÄHLTER Bekehrter der Oberseite 1 (int, Daten) 
                 VON HistorianDB.dbo.TLData O
                 WO O.TLInstance = @Occtl
                 UND O.timestamp <= M.timestamp
                 UND O.Type=0 
                 UND isnumeric (O.data) = 1
                 AUFTRAG DURCH O.timestamp desc) Ende
       , (AUSERWÄHLTER Bekehrter der Oberseite 1 (real, Daten) 
         VON HistorianDB.dbo.TLData O
         WO O.TLInstance = @OatTl
         UND O.timestamp zwischen @sdate und M.timestamp
         UND O.Type=0 
         UND isnumeric (O.data) = 1
         AUFTRAG DURCH O.timestamp desc)
       , (AUSERWÄHLTER Bekehrter der Oberseite 1 (real, Daten) 
         VON HistorianDB.dbo.TLData O
         WO O.TLInstance = @SpaceTl
         UND O.timestamp zwischen @sdate und M.timestamp
         UND O.Type=0 
         UND isnumeric (O.data) = 1
         AUFTRAG DURCH O.timestamp desc)

VON HistorianDB.dbo.TLData M
WO TLInstance = @Meter 
UND Zeitstempel zwischen @sdate und @edate
UND Type=0 
UND isnumeric (Daten) =1
AUFTRAG DURCH Zeitstempel      

-- 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 anschließen #reportdata prev auf #reportdata.id - 1 = prev.id =

-- 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, 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 #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,
    Summe (Fall, wenn isnull (Inanspruchnahme, 2) = 0 dann isnull (r1.datachange, 0) sonst 0 Ende) als OffHoursTotal,
    Summe (Fall, wenn isnull (Inanspruchnahme, 2) = 1 dann isnull (r1.datachange, 0) sonst 0 Ende) als OnHoursTotal,
    avg (isnull (r1.Spacetemp, 000.0)) als AvgSpaceTemp,
    Fall, wenn @reportselection = „D“ oder Minute (isnull (r1.Spacetemp, 999.9)) = 999.9 dann 0.0 sonst Minute (isnull (r1.Spacetemp, 999.9)) Ende als MinSpaceTemp,
    Fall, wenn @reportselection = „D“ dann 0.0 sonst maximales (isnull (r1.Spacetemp, 000.0)) Ende als MaxSpaceTemp,
    avg (isnull (r1.oat, 000.0)) als AvgOat,
    Fall, wenn @reportselection = „D“ oder Minute (isnull (r1.Oat, 999.9)) = 999.9 dann 0.0 sonst Minute (isnull (r1.Oat, 999.9)) Ende als MinOat,
    Fall, wenn @reportselection = „D“ dann 0.0 sonst maximales (isnull (r1.oat, 000.0)) Ende als MaxOat
 
Von den Zeiträumen
LINKE ÄUSSERE VERBINDEN #ReportData r1 auf r1.timestamp zwischen psdate und pedate
Kreuz anwenden dbo.udf_getrates_3 z (r1.Timestamp, @util)    
GRUPPE DURCH PSname, r1.datestamp, PSdate
AUFTRAG DURCH PSdate
ENDE

Antwort : SP ändern, um Tag der Gradverleihunggesamtmenge für jeden Monat zurückzubringen

Gut war die im Begriff, die neue Reportwahl in Ihrer anderen Frage zu sein - Viertelstunden vorbei zu erhalten alle mögliche Daten zwischen Anfang und Ende und so, die Sie sie/Matrix grafisch darstellen können sie irgendeine Weise, Sie wünschen…

Für Tage der Gradverleihung sind wir erhalten bereits avgoat, und unsicher, was das max von dem sein würde, wie Sie über geschrieben haben (anders als das Wählen des Maximalwerts entweder des calc oder null)…

So fügte in hinzu:

, Fall, wenn avg (isnull (r1.oat, 000.0)) > dann avg 15.5 (isnull (r1.oat, 000.0))- 15.5 sonst 0.0 Ende als DailyDegrees

Dann verwirklicht für den Viertelstundenreport, ist es noch „tägliche“ Grad nicht qurter Stundengrad und also kann das gleiche Nachschlagen für einen Tag tun, den wir für den Jahrreport benötigen:


, (auserwählte Summe (DD)
   von (Fall vorwählen, wenn avg (isnull (r2.oat, 000.0)) > 15.5
                     dann avg (isnull (r2.oat, 000.0))- 15.5
                     sonst 0.0 Ende als DD
         vom #reportdata r2
         wo Bekehrter (Putzfrau (8), r2.timestamp, 112) zwischen Bekehrtem (Putzfrau (8), psdate, 112) und Bekehrter (Putzfrau (8), pedate, 112)
         Gruppe durch Bekehrten (Putzfrau (8), r2.timestamp, 112)) dr2) als dailydegrees


welches als neue Spalte hinunter die Unterseite vor hinzugefügt wird:


Von den Zeiträumen
LINKE ÄUSSERE VERBINDEN #ReportData r1 auf r1.timestamp zwischen psdate und pedate



Und wir können das Datumstreckengeschäft dadurch besprechen dass anderes Gewinde, wenn OKAY mit Ihnen?




Weitere Lösungen  
 
programming4us programming4us