Pytanie : Modyfikować SP suma krzyż - odnosić się przeciw odnosić się godzina

I używać the SP i funkcja być suma od datalogger przyrząd, che notować akumulacyjny wartość każdy 15mins.

Somehow I potrzebować w ten SP, the zdolność ekstra param dzwonić "@OccTL", i krzyżować - odnosić się datachange przeciw the dane od the HistorianDB.DBO.TLData dokąd TLInstance = @OccTL.

The dane od @OccTL być lub (1) lub (0). Jeżeli the timestamp potrzeba sprawdzać przeciw the OccTL dane, gdy the Wartość dla the aktualny timestamp być (0), the datachange sumować OffHoursTotal, gdy the OccTL dane być (1), the datachange sumować OnHoursTotal. The całkowity daya_data, musieć wciąż wracać gdy ono obecnie być. W Ten Sposób my właśnie dodawać 2 ekstra kolumna dla OffHoursTotal i OnHoursTotal.

I myśl jeżeli @OccTL przechodzić jako (0), the OffHourTotal i OnHourTotal ignorować, incase żadny dziejowy dane być recorded.
(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:
USE [EnergySuiteDB]
IŚĆ
/****** Przedmiot:  StoredProcedure [dbo]. [GetCostPerPeriod] Pismo Data: 07/31/2010 06:18: 55 ******/
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, @calc 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*@calc, 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, #reportdata. Dane)
OD #ReportData 
lewy zewnętrzny łączyć #reportdata prev na #reportdata.id - (1) = prev.id

-- teraz sprawdzać dla negatyw liczba opłata meter reset (lub)

AKTUALIZOWAĆ #reportdata USTALONY DataChange = (0) DOKĄD DataChange < (0)


-- 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:  UserDefinedFunction [dbo]. [udf_getrates_3] Pismo Data: 07/31/2010 06:19: 11 ******/
SET ANSI_NULLS DALEJ
IŚĆ
USTAWIAĆ QUOTED_IDENTIFIER DALEJ
IŚĆ
ZMIENIAĆ FUNKCJA [dbo]. [udf_getrates_3] (@date datetime, @util varchar (50))
POWRÓT @tbl stół (chargerate PIENIĄDZE, pobór PIENIĄDZE, caprate PIENIĄDZE, ChargeCap pławik, StandingDayCharge pieniądze)

ZACZYNAĆ


  oznajmiać @dw char (1)
  ustawiać @dw = opuszczać (DATENAME (DW, @date), 1)

  oznajmiać @hr int
  ustawiać @hr = datepart (godzina, @date)

  wkładać @tbl 
  wybierać Wierzchołek (1) --EffectiveStartDate, EffectiveEndDate, 
         SKRZYNKA GDY @dw = "S" i ((@hr między datepart (godzina, weekenddaystart) i datepart (godzina, weekenddayend) i isnull (weekenddaycost, (0)) <> (0))
                                  lub (@hr NIE między datepart (godzina, weekenddaystart) i datepart (godzina, weekenddayend) i isnull (weekendnightcost, (0)) <> (0)))
              WTEDY
                     SKRZYNKA GDY @hr między datepart (godzina, weekenddaystart) i datepart (godzina, weekenddayend)
                          WTEDY weekenddaycost
                          INNY weekendnightcost
                     KOŃCÓWKA
              INNY 
                     SKRZYNKA GDY @hr między datepart (godzina, weekdaystart) i datepart (godzina, weekdayend)
                          WTEDY weekdaycost
                          INNY weeknightcost
                     KOŃCÓWKA
         KOŃCÓWKA, climateChangeLevyRate, ((chargeablecapacity*capacityrate)), chargeablecapacity, isnull (StandingDayCharge, (0))
  OD EnergySuiteDB.dbo.Rates
  dokąd UtilityName=@util 
  I @date między EffectiveStartDate i EffectiveEndDate 
  Rozkaz ID desc    -- dostawać the "ostatni" rząd który zakrywać the prosić data.

  jeżeli @@rowcount = (0)
     wszywka @tbl 
     wybrany Wierzchołek (1) --EffectiveStartDate, EffectiveEndDate, 
         SKRZYNKA GDY @dw = "S" i ((@hr między datepart (godzina, weekenddaystart) i datepart (godzina, weekenddayend) i isnull (weekenddaycost, (0)) <> (0))
                                  lub (@hr NIE między datepart (godzina, weekenddaystart) i datepart (godzina, weekenddayend) i isnull (weekendnightcost, (0)) <> (0)))
              WTEDY
                     SKRZYNKA GDY @hr między datepart (godzina, weekenddaystart) i datepart (godzina, weekenddayend)
                          WTEDY weekenddaycost
                          INNY weekendnightcost
                     KOŃCÓWKA
              INNY 
                     SKRZYNKA GDY @hr między datepart (godzina, weekdaystart) i datepart (godzina, weekdayend)
                          WTEDY weekdaycost
                          INNY weeknightcost
                     KOŃCÓWKA
         KOŃCÓWKA, climateChangeLevyRate, ((chargeablecapacity*capacityrate)), chargeablecapacity, isnull (StandingDayCharge, (0))
     OD EnergySuiteDB.dbo.Rates
     dokąd UtilityName=@util 
     rozkaz EffectiveEndDate desc   -- wysoki enddate należeć "(1)" the wszystkie nakrycie/brak tempo.
  powrót 
KOŃCÓWKA

Odpowiedź : Modyfikować SP suma krzyż - odnosić się przeciw odnosić się godzina

Być może ono być the div który być miotanie rzecz daleko.  Na strona internetowa, stojak naprawdę stojak.  Ty mieć przed i po parawanowy strzał?  Połączenie my móc?
Inne rozwiązania  
 
programming4us programming4us