Vraag : Wijzig SP om het totaal van de graaddag voor elke maand terug te keren

Ik moet de faciliteit in SP toevoegen hieronder, dat wanneer, AvgOAT voor elke die dag in de formule wordt gevergd en wordt gebruikt:

Daily DegreeDays=Max (avgOAT-15.5, 0)

For een Jaar het rapport, de maandelijkse totaal van degreedays, voor alle andere rapporten zou moeten zijn teruggekeerd, zijn de dagen hoe dan ook teruggekeerd, zo nnot zo veel van een issue.
" codeBody "
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:
USE [EnergySuiteDB]
GA
/****** Heb bezwaar:  StoredProcedure [dbo]. [GetCostPerPeriod] de Datum van het Manuscript: het 19:40 van 08/14/2010: 14 ******/
VASTGESTELDE ANSI_NULLS 
GA
PLAATS QUOTED_IDENTIFIER
GA
VERANDER PROCEDURE [dbo]. [GetCostPerPeriod] @sDate DATETIME, @Meter drijft int., @GasRate int., @pf vlotter, varchar @util (50), @reportselectionklusje (1), @co2 vlotter, @Carbon, vlotter @calc, @occtl int., @oattl int., @Spacetl int.

ZOALS
BEGIN

--Een machtsfactor van 0 zal uitzondering werpen, zodat moet dit worden behandeld
als isnull (@pf, 0) =0 vastgesteld @pf = 1

-- verklaar en opstelling sommige die variabelen op inkomende parameters worden gebaseerd

VERKLAAR @PREVVAL NUMERIEK (12, 4)
verklaar @grate numeriek (12.4)
verklaar @edate datetime
verklaar @intervals int.

plaats @sdate = bekeerling (klusje (8), @sdate, 112)   -- zorg ervoor de tijd bij „begin“ van periode is
Als @reportselection = „M“ @sdate = DATEADD plaatste (maand, DATEDIFF (maand, 0, @sdate), 0)
Als @reportselection = „Y“ @sdate = datename (jaar, @sdate) + „0101“ plaatste

de reeks @edate = zet (om klusje (8), @sdate, 112) + „23:59: 59.997“
Als @reportselection = „W“ @edate = plaatste zet (om klusje (8), @sdate+6,112) + „23:59: 59.997“
Als @reportselection = „M“ @edate = DATEADD plaatste (maand, DATEDIFF (maand, -1, @sdate), 0) - 0.00000005
Als @reportselection = „Y“ @edate = datename (jaar, @sdate) + „1231 23:59 plaatste: 59.997“

vastgestelde @intervals = dag (dateadd (maand, datediff (maand, - 1, @sdate), 0) - 1) 
Als @reportselection = „D“ @intervals = @intervals * 96 plaatste  -- 96 kwart uren in een dag.
Als @reportselection = „Y“ @intervals = 1 plaatste

als isnull (@gasrate, 0) = 1
   reeks @grate = 11.0786 -- 1.02264 * 39/3.6
anders
   reeks @grate = 1.0

-- cre�ër nu ons de gegevensuittreksel van het temperaturenrapport van hoofdgeschiedenislijst

ALS OBJECT_ID („tempdb. #ReportData“, „U“) IS GEEN ONGELDIGE #ReportData VAN DE LIJST VAN DE DALING  -- niet zou moeten worden vereist
 
CRE�ëR #ReportData VAN DE LIJST
(
    De identiteits primaire sleutel van identiteitskaart int.,
    TimeStamp DATETIME,
    Honderdste int.,      
    NUMERIEKE gegevens (12, 4),
    NUMERIEKE DataChange (12, 4),
    Datetime van DateStamp,
    Inbezitneming int.,
    Numerieke HAVER (12.4),
    Numerieke SpaceTemp (12.4)

)

-- bevolk onze rapportgegevens

TUSSENVOEGSEL IN #ReportData (Timestamp, Honderdste, Gegevens, Datestamp, inbezitneming, HAVER, SpaceTemp)
SELECTEER Timestamp, Honderdste, zet (echt, Gegevens) * @grate*@calc, geval wanneer om @reportselection = „Y“ dan (klusje (6), timestamp, 112) + ' anders 01 ' omzet omzet (klusje (8), timestamp, 112) eind
       , geval wanneer @occtl = 0 toen anders 2 (UITGEZOCHTE bovenkant 1 zet om (int., gegevens) 
                 VAN HistorianDB.dbo.TLData O
                 WAAR O.TLInstance = @Occtl
                 EN O.timestamp <= M.timestamp
                 EN O.Type=0 
                 EN isnumeric (O.data) = 1
                 ORDE TEGEN desc) eind O.timestamp
       , (UITGEZOCHTE bovenkant 1 zet om (echt, gegevens) 
         VAN HistorianDB.dbo.TLData O
         WAAR O.TLInstance = @OatTl
         EN O.timestamp tussen @sdate en M.timestamp
         EN O.Type=0 
         EN isnumeric (O.data) = 1
         ORDE DOOR O.timestamp desc)
       , (UITGEZOCHTE bovenkant 1 zet om (echt, gegevens) 
         VAN HistorianDB.dbo.TLData O
         WAAR O.TLInstance = @SpaceTl
         EN O.timestamp tussen @sdate en M.timestamp
         EN O.Type=0 
         EN isnumeric (O.data) = 1
         ORDE DOOR O.timestamp desc)

VAN HistorianDB.dbo.TLData M
WAAR TLInstance = @Meter 
EN timestamp tussen @sdate en @edate
EN Type=0 
EN isnumeric (gegevens) =1
ORDE DOOR timestamp      

-- doe de update onze gegevens het verschil tussen meterlezingen en kosten berekenen

WERK #reportdata bij
PLAATS DataChange = #reportdata. Gegevens - isnull (prev.data, #reportdata. Gegeven)
VAN #ReportData 
linker buiten sluit zich aan bij #reportdata prev op #reportdata.id - 1 = prev.id

-- nu controle voor negatieve aantallenrechten om het terugstellen (of het knoeien) te meten

#reportdata VASTGESTELDE DataChange van de UPDATE = 0 WAAR DataChange < 0


-- nu kunnen wij het rapport in werking stellen

; Met Periodes zoals
(
   Selecteer geval wanneer @reportselection = het anders geval van „D“ toen dateadd (minuut, aantal * 15, @sdate) wanneer @reportselection = „Y“ dateadd (maand, aantal, @sdate) dateadd (dag, aantal, @sdate) dan anders eind als PSDate beëindigt 
   , geval wanneer @reportselection = „D“ toen dateadd (minuut, aantal * 15 + 15, @sdate) - 0.00000005 anders geval wanneer @reportselection = „Y“ toen DATEADD (maand, DATEDIFF (maand, -1, dateadd (maand, aantal, @sdate)), 0) - anders 0.00000005 zetten (om klusje (8), @sdate+number, 112) + „23:59: 59.997“ eindeind zoals PEDate 
   , geval toen @reportselection = „D“ toen (datename (dw, @sdate), 03) + ' „+ bekeerling wegging (klusje (8), @sdate, 03) +right (bekeerling (klusje (19), dateadd (minuut, aantal * 15, @sdate), 100),) anders geval 8 toen @reportselection = „Y“ toen wegging (datename (maand, dateadd (maand, aantal, @sdate)), gingen 3) +“ „+ datename (jaar, @sdate) anders weg (datename (dw, dateadd (dag, aantal, @sdate)), 3) +“ 'het eind + van het bekeerlings (klusje (8), dateadd (dag, aantal, @sdate), 03) eind als PSName 
   , geval wanneer @reportselection = anders geval toen 1.0/96.0 van „D“ wanneer @reportselection in („M“, „W“) anders dag toen 1.0 (dateadd (maand, number+datediff (maand, -1, @sdate), 0) - 1) eindeind als dayparts
   van hoofd. .spt_values n met (nolock) 
   waar type = „p“
   en geval wanneer @reportselection = het anders geval van „D“ toen dateadd (minuut, aantal * 15, @sdate) wanneer @reportselection = „Y“ dateadd (maand, aantal, @sdate) dateadd (dag, aantal, @sdate) dan anders eind < @edate beëindigt
)
SELECTEER 
    PSname als Datum,
    SOM (isnull (r1.datachange, 0)) ALS day_data,
    SOM (isnull (r1.datachange, 0))*@CO2 ALS CO2_data,
    SOM (isnull (r1.datachange, 0))*@Carbon ALS Carbon_data,
    SOM (isnull (r1.datachange, 0) *chargerate) ALS DataCost,
    SOM (isnull (r1.datachange, 0) *levy) als TotalLevy,
    maximum (geval wanneer r1.datestamp ongeldig toen anders caprate eind 0) is/@intervals als TotalCap,                           
    maximum (geval wanneer r1.datestamp ongeldig toen anders chargecap eind 0) is als ChargeCap,
    maximum (geval wanneer r1.datestamp ongeldig toen eind 0 anders dayparts * StandingDayCharge) is als StandingDayCharge,
    maximum (geval wanneer r1.datestamp ongeldig toen eind 0 anders dayparts * StandingDayCharge is) 
    + SOM (isnull (r1.datachange, 0) * (chargerate + heffing)) 
    + maximum (geval wanneer r1.datestamp ongeldig toen anders caprate eind 0) is/@intervals als TotalCost,
    isnull (((geval wanneer @reportselection = de SOM van „D“ toen (isnull (r1.datachange, 0)) anders (uitgezochte hoogste 1 datachange van #reportdata r2 waar r2.datestamp = orde r1.datestamp door r2.datachange desc) eind) *4)/@pf, 0) als MaxkVA,
    isnull (((geval wanneer @reportselection = de SOM van „D“ toen (isnull (r1.datachange, 0)) anders (uitgezochte hoogste 1 datachange van #reportdata r2 waar r2.datestamp = orde r1.datestamp door r2.datachange desc) eind) *4), 0) als MaxkW,
    (uitgezochte hoogste 1 timestamp van #reportdata r2 waar r2.datestamp = orde r1.datestamp door r2.datachange desc, r2.timestamp desc) als MaxDataChangeTimeStamp,
    som (geval wanneer isnull (inbezitneming, 2) = eind 0 toen isnull (r1.datachange, 0) anders 0) als OffHoursTotal,
    som (geval wanneer isnull (inbezitneming, 2) = 1 toen isnull (r1.datachange, 0) eind anders 0) als OnHoursTotal,
    avg (isnull (r1.Spacetemp, 000.0)) als AvgSpaceTemp,
    geval wanneer @reportselection = „D“ of min (isnull (r1.Spacetemp, 999.9)) = 999.9 toen 0.0 anders min (isnull (r1.Spacetemp, 999.9)) eind als MinSpaceTemp,
    geval wanneer @reportselection = „D“ toen 0.0 anders maximum (isnull (r1.Spacetemp, 000.0)) eind als MaxSpaceTemp,
    avg (isnull (r1.oat, 000.0)) als AvgOat,
    geval wanneer @reportselection = „D“ of min (isnull (r1.Oat, 999.9)) = 999.9 toen 0.0 anders min (isnull (r1.Oat, 999.9)) eind als MinOat,
    geval wanneer @reportselection = „D“ toen 0.0 anders maximum (isnull (r1.oat, 000.0)) eind als MaxOat
 
VAN Periodes
LINKER BUITEN SLUIT zich aan bij #ReportData r1 op r1.timestamp tussen psdate en pedate
het kruis past dbo.udf_getrates_3 (r1.Timestamp, @util) toe    
GROEP DOOR PSname, r1.datestamp, PSdate
ORDE DOOR PSdate
EIND

Antwoord : Wijzig SP om het totaal van de graaddag voor elke maand terug te keren

Goed, ging dat de nieuwe rapportoptie in uw andere vraag zijn - om tegen kwartuur om het even welke data tussen begin en eind en die manier te krijgen u hen/matrijs kunt grafisch voorstellen hen om het even welke manier u… wilt

Voor graaddagen, zijn wij reeds worden avgoat, en onzeker wat MAXIMUM van dat zou zijn aangezien u hierboven (buiten het kiezen van de maximumwaarde van of calc, of nul)… hebt geschreven

Zo, voegde toe in:

, geval wanneer avg (isnull (r1.oat, 000.0)) > 15.5 toen avg (isnull (r1.oat, 000.0))- 15.5 anders 0.0 eind als DailyDegrees

Dan gerealiseerd voor het rapport van het kwartuur, is het nog de „dagelijkse“ graden van het graden niet qurter uur, en kan zo de zelfde raadpleging voor een dag doen die wij voor het jaarrapport nodig hebben:


, (uitgezochte som (dd)
   van (uitgezocht geval wanneer avg (isnull (r2.oat, 000.0)) > 15.5
                     dan avg (isnull (r2.oat, 000.0))- 15.5
                     anders 0.0 eind als DD
         van #reportdata r2
         waar zet om de bekeerling (klusje (8), r2.timestamp, 112) tussen bekeerling (klusje (8), psdate, 112) en (klusje (8), pedate, 112)
         groep door bekeerling (klusje (8), r2.timestamp, 112)) dr2) als dailydegrees


welke als nieuwe kolom onderaan de bodem vóór wordt toegevoegd:


VAN Periodes
LINKER BUITEN SLUIT zich aan bij #ReportData r1 op r1.timestamp tussen psdate en pedate



En wij kunnen de zaken van de datumwaaier in die zin dat andere draad als o.k. met u bespreken?




Andere oplossingen  
 
programming4us programming4us