我在SQL Server中有一個包含機車故障約兩年的表。我正在嘗試創建一個aspx頁面,用於比較兩個不同時期的上述數據,例如%年齡改善/惡化,每月,每年或基於用戶輸入。從SQL Server中單表數據的兩個不同時期的比較分析
表結構(PunctualityMain
)爲:
ID Date Loco No. Shed Classification loco_type Equipt
我已創建使用兩個樞軸,一個用於進行比較的數據(C =電流),另一個用於先前的數據(P =前一個)
下面的存儲過程ALTER PROCEDURE [dbo].[Comparative]
@pstrdt datetime,
@penddt datetime,
@cstrdt datetime,
@cenddt datetime,
@loco_type nvarchar(255)
AS
BEGIN
CREATE TABLE #previousdata (Equipt nvarchar(255), BSLP numeric(18,0), AQP numeric(18,0), KYNP numeric(18,0), ASNP numeric(18,0), HWHP numeric(18,0), MGSP numeric(18,0), GMOP numeric(18,0), WATP numeric(18,0), ANGLP numeric(18,0), GZBP numeric(18,0), LDHP numeric(18,0), JHSP numeric(18,0), CNBP numeric(18,0), AJJP numeric(18,0), EDP numeric(18,0), RPMP numeric(18,0), BZAP numeric(18,0), LGDP numeric(18,0), KZJP numeric(18,0), TATAP numeric(18,0), BNDMP numeric(18,0), BKSCP numeric(18,0), SRCP numeric(18,0), BIAP numeric(18,0), BRCP numeric(18,0), BLP numeric(18,0), TKDP numeric(18,0), ETP numeric(18,0), NKJP numeric(18,0))
CREATE TABLE #currentdata (Equipt nvarchar(255), BSLC numeric(18,0), AQC numeric(18,0), KYNC numeric(18,0), ASNC numeric(18,0), HWHC numeric(18,0), MGSC numeric(18,0), GMOC numeric(18,0), WATC numeric(18,0), ANGLC numeric(18,0), GZBC numeric(18,0), LDHC numeric(18,0), JHSC numeric(18,0), CNBC numeric(18,0), AJJC numeric(18,0), EDC numeric(18,0), RPMC numeric(18,0), BZAC numeric(18,0), LGDC numeric(18,0), KZJC numeric(18,0), TATAC numeric(18,0), BNDMC numeric(18,0), BKSCC numeric(18,0), SRCC numeric(18,0), BIAC numeric(18,0), BRCC numeric(18,0), BLC numeric(18,0), TKDC numeric(18,0), ETC numeric(18,0), NKJC numeric(18,0))
INSERT INTO #previousdata SELECT Equipt, [BSL] AS BSLP, [AQ] AS AQP, [KYN] AS KYNP, [ASN] AS ASNP, [HWH] AS HWHP, [MGS] AS MGSP, [GMO] AS GMOP, [WAT] AS WATP, [ANGL] AS ANGLP, [GZB] AS GZBP, [LDH] AS LDHP, [JHS] AS JHSP, [CNB] AS CNBP, [AJJ] AS AJJP, [ED] AS EDP, [RPM] AS RPMP, [BZA] AS BZAP, [LGD] AS LGDP, [KZJ] AS KZJP, [TATA] AS TATAP, [BNDM] AS BNDMP, [BKSC] AS BKSCP, [SRC] AS SRCP, [BIA] AS BIAP, [BRC] AS BRCP, [BL] AS BLP, [TKD] AS TKDP, [ET] AS ETP, [NKJ] AS NKJP
FROM
(
SELECT Equipt, Shed
FROM PunctualityMain WHERE classification = 'Loco' AND (loco_type = @loco_type OR @loco_type IS NULL) AND (Date >= @pstrdt OR @pstrdt IS NULL) AND (Date <= @penddt OR @penddt IS NULL)
) x
PIVOT
(
COUNT(Shed)
FOR Shed IN ([BSL], [AQ], [KYN], [ASN], [HWH], [MGS], [GMO], [WAT], [ANGL], [GZB], [LDH], [JHS], [CNB], [AJJ], [ED], [RPM], [BZA], [LGD], [KZJ], [TATA], [BNDM], [BKSC], [SRC], [BIA], [BRC], [BL], [TKD], [ET], [NKJ])) p
INSERT INTO #currentdata SELECT Equipt, [BSL] AS BSLC, [AQ] AS AQC, [KYN] AS KYNC, [ASN] AS ASNC, [HWH] AS HWHC, [MGS] AS MGSC, [GMO] AS GMOC, [WAT] AS WATC, [ANGL] AS ANGLC, [GZB] AS GZBC, [LDH] AS LDHC, [JHS] AS JHSC, [CNB] AS CNBC, [AJJ] AS AJJC, [ED] AS EDC, [RPM] AS RPMC, [BZA] AS BZAC, [LGD] AS LGDC, [KZJ] AS KZJC, [TATA] AS TATAC, [BNDM] AS BNDMC, [BKSC] AS BKSCC, [SRC] AS SRCC, [BIA] AS BIAC, [BRC] AS BRCC, [BL] AS BLC, [TKD] AS TKDC, [ET] AS ETC, [NKJ] AS NKJC
FROM
(
SELECT Equipt, Shed
FROM PunctualityMain WHERE classification = 'Loco' AND (loco_type = @loco_type OR @loco_type IS NULL) AND (Date >= @cstrdt OR @cstrdt IS NULL) AND (Date <= @cenddt OR @cenddt IS NULL)
) x
PIVOT
(
COUNT(Shed)
FOR Shed IN ([BSL], [AQ], [KYN], [ASN], [HWH], [MGS], [GMO], [WAT], [ANGL], [GZB], [LDH], [JHS], [CNB], [AJJ], [ED], [RPM], [BZA], [LGD], [KZJ], [TATA], [BNDM], [BKSC], [SRC], [BIA], [BRC], [BL], [TKD], [ET], [NKJ])) p
SELECT
COALESCE(t1.Equipt, t2.Equipt) Equipt, NULLIF(BSLP,0) AS 'BSLP', NULLIF(BSLC,0) AS 'BSLC', CAST(((BSLP-BSLC)/NULLIF(BSLP,0)*100) AS DECIMAL (10,2))AS 'BSL_I_D', NULLIF(AQP,0) AS 'AQP', NULLIF(AQC,0) AS 'AQC', CAST(((AQP-AQC)/NULLIF(AQP,0)*100) AS DECIMAL (10,2))AS 'AQ_I_D', NULLIF(KYNP,0) AS 'KYNP', NULLIF(KYNC,0) AS 'KYNC', CAST(((KYNP-KYNC)/NULLIF(KYNP,0)*100) AS DECIMAL (10,2))AS 'KYN_I_D', NULLIF(ASNP,0) AS 'ASNP', NULLIF(ASNC,0) AS 'ASNC', CAST(((ASNP-ASNC)/NULLIF(ASNP,0)*100) AS DECIMAL (10,2))AS 'ASN_I_D', NULLIF(HWHP,0) AS 'HWHP', NULLIF(HWHC,0) AS 'HWHC', CAST(((HWHP-HWHC)/NULLIF(HWHP,0)*100) AS DECIMAL (10,2))AS 'HWH_I_D', NULLIF(MGSP,0) AS 'MGSP', NULLIF(MGSC,0) AS 'MGSC', CAST(((MGSP-MGSC)/NULLIF(MGSP,0)*100) AS DECIMAL (10,2))AS 'MGS_I_D', NULLIF(GMOP,0) AS 'GMOP', NULLIF(GMOC,0) AS 'GMOC', CAST(((GMOP-GMOC)/NULLIF(GMOP,0)*100) AS DECIMAL (10,2))AS 'GMO_I_D', NULLIF(WATP,0) AS 'WATP', NULLIF(WATC,0) AS 'WATC', CAST(((WATP-WATC)/NULLIF(WATP,0)*100) AS DECIMAL (10,2))AS 'WAT_I_D', NULLIF(ANGLP,0) AS 'ANGLP', NULLIF(ANGLC,0) AS 'ANGLC', CAST(((ANGLP-ANGLC)/NULLIF(ANGLP,0)*100) AS DECIMAL (10,2))AS 'ANGL_I_D', NULLIF(GZBP,0) AS 'GZBP', NULLIF(GZBC,0) AS 'GZBC', CAST(((GZBP-GZBC)/NULLIF(GZBP,0)*100) AS DECIMAL (10,2))AS 'GZB_I_D', NULLIF(LDHP,0) AS 'LDHP', NULLIF(LDHC,0) AS 'LDHC', CAST(((LDHP-LDHC)/NULLIF(LDHP,0)*100) AS DECIMAL (10,2))AS 'LDH_I_D', NULLIF(JHSP,0) AS 'JHSP', NULLIF(JHSC,0) AS 'JHSC', CAST(((JHSP-JHSC)/NULLIF(JHSP,0)*100) AS DECIMAL (10,2))AS 'JHS_I_D', NULLIF(CNBP,0) AS 'CNBP', NULLIF(CNBC,0) AS 'CNBC', CAST(((CNBP-CNBC)/NULLIF(CNBP,0)*100) AS DECIMAL (10,2))AS 'CNB_I_D', NULLIF(AJJP,0) AS 'AJJP', NULLIF(AJJC,0) AS 'AJJC', CAST(((AJJP-AJJC)/NULLIF(AJJP,0)*100) AS DECIMAL (10,2))AS 'AJJ_I_D', NULLIF(EDP,0) AS 'EDP', NULLIF(EDC,0) AS 'EDC', CAST(((EDP-EDC)/NULLIF(EDP,0)*100) AS DECIMAL (10,2))AS 'ED_I_D', NULLIF(RPMP,0) AS 'RPMP', NULLIF(RPMC,0) AS 'RPMC', CAST(((RPMP-RPMC)/NULLIF(RPMP,0)*100) AS DECIMAL (10,2))AS 'RPM_I_D', NULLIF(BZAP,0) AS 'BZAP', NULLIF(BZAC,0) AS 'BZAC', CAST(((BZAP-BZAC)/NULLIF(BZAP,0)*100) AS DECIMAL (10,2))AS 'BZA_I_D', NULLIF(LGDP,0) AS 'LGDP', NULLIF(LGDC,0) AS 'LGDC', CAST(((LGDP-LGDC)/NULLIF(LGDP,0)*100) AS DECIMAL (10,2))AS 'LGD_I_D', NULLIF(KZJP,0) AS 'KZJP', NULLIF(KZJC,0) AS 'KZJC', CAST(((KZJP-KZJC)/NULLIF(KZJP,0)*100) AS DECIMAL (10,2))AS 'KZJ_I_D', NULLIF(TATAP,0) AS 'TATAP', NULLIF(TATAC,0) AS 'TATAC', CAST(((TATAP-TATAC)/NULLIF(TATAP,0)*100) AS DECIMAL (10,2))AS 'TATA_I_D', NULLIF(BNDMP,0) AS 'BNDMP', NULLIF(BNDMC,0) AS 'BNDMC', CAST(((BNDMP-BNDMC)/NULLIF(BNDMP,0)*100) AS DECIMAL (10,2))AS 'BNDM_I_D', NULLIF(BKSCP,0) AS 'BKSCP', NULLIF(BKSCC,0) AS 'BKSCC', CAST(((BKSCP-BKSCC)/NULLIF(BKSCP,0)*100) AS DECIMAL (10,2))AS 'BKSC_I_D', NULLIF(SRCP,0) AS 'SRCP', NULLIF(SRCC,0) AS 'SRCC', CAST(((SRCP-SRCC)/NULLIF(SRCP,0)*100) AS DECIMAL (10,2))AS 'SRC_I_D', NULLIF(BIAP,0) AS 'BIAP', NULLIF(BIAC,0) AS 'BIAC', CAST(((BIAP-BIAC)/NULLIF(BIAP,0)*100) AS DECIMAL (10,2))AS 'BIA_I_D', NULLIF(BRCP,0) AS 'BRCP', NULLIF(BRCC,0) AS 'BRCC', CAST(((BRCP-BRCC)/NULLIF(BRCP,0)*100) AS DECIMAL (10,2))AS 'BRC_I_D', NULLIF(BLP,0) AS 'BLP', NULLIF(BLC,0) AS 'BLC', CAST(((BLP-BLC)/NULLIF(BLP,0)*100) AS DECIMAL (10,2))AS 'BL_I_D', NULLIF(TKDP,0) AS 'TKDP', NULLIF(TKDC,0) AS 'TKDC', CAST(((TKDP-TKDC)/NULLIF(TKDP,0)*100) AS DECIMAL (10,2))AS 'TKD_I_D', NULLIF(ETP,0) AS 'ETP', NULLIF(ETC,0) AS 'ETC', CAST(((ETP-ETC)/NULLIF(ETP,0)*100) AS DECIMAL (10,2))AS 'ET_I_D', NULLIF(NKJP,0) AS 'NKJP', NULLIF(NKJC,0) AS 'NKJC', CAST(((NKJP-NKJC)/NULLIF(NKJP,0)*100) AS DECIMAL (10,2))AS 'NKJ_I_D', ([BSLP] + [AQP] + [KYNP] + [ASNP] + [HWHP] + [MGSP] + [GMOP] + [WATP] + [ANGLP] + [GZBP] + [LDHP] + [JHSP] + [CNBP] + [AJJP] + [EDP] + [RPMP] + [BZAP] + [LGDP] + [KZJP] + [TATAP] + [BNDMP] + [BKSCP] + [SRCP] + [BIAP] + [BRCP] + [BLP] + [TKDP] + [ETP] + [NKJP]) AS 'TTL_P', ([BSLC] + [AQC] + [KYNC] + [ASNC] + [HWHC] + [MGSC] + [GMOC] + [WATC] + [ANGLC] + [GZBC] + [LDHC] + [JHSC] + [CNBC] + [AJJC] + [EDC] + [RPMC] + [BZAC] + [LGDC] + [KZJC] + [TATAC] + [BNDMC] + [BKSCC] + [SRCC] + [BIAC] + [BRCC] + [BLC] + [TKDC] + [ETC] + [NKJC]) AS 'TTL_C', CAST(((([BSLP] + [AQP] + [KYNP] + [ASNP] + [HWHP] + [MGSP] + [GMOP] + [WATP] + [ANGLP] + [GZBP] + [LDHP] + [JHSP] + [CNBP] + [AJJP] + [EDP] + [RPMP] + [BZAP] + [LGDP] + [KZJP] + [TATAP] + [BNDMP] + [BKSCP] + [SRCP] + [BIAP] + [BRCP] + [BLP] + [TKDP] + [ETP] + [NKJP])-([BSLC] + [AQC] + [KYNC] + [ASNC] + [HWHC] + [MGSC] + [GMOC] + [WATC] + [ANGLC] + [GZBC] + [LDHC] + [JHSC] + [CNBC] + [AJJC] + [EDC] + [RPMC] + [BZAC] + [LGDC] + [KZJC] + [TATAC] + [BNDMC] + [BKSCC] + [SRCC] + [BIAC] + [BRCC] + [BLC] + [TKDC] + [ETC] + [NKJC]))/(([BSLP] + [AQP] + [KYNP] + [ASNP] + [HWHP] + [MGSP] + [GMOP] + [WATP] + [ANGLP] + [GZBP] + [LDHP] + [JHSP] + [CNBP] + [AJJP] + [EDP] + [RPMP] + [BZAP] + [LGDP] + [KZJP] + [TATAP] + [BNDMP] + [BKSCP] + [SRCP] + [BIAP] + [BRCP] + [BLP] + [TKDP] + [ETP] + [NKJP]))*100) AS DECIMAL (10,2))AS 'TTL_I_D'
FROM #currentdata t1
FULL JOIN #previousdata t2 ON t1.Equipt = t2.Equipt
End
它給我造成的
Equipt BSLP BSLC BSL_I_D AQP AQC AQ_I_D ..............
TM 4 5 -25.00 8 6 25.00
VCD 1 100.00 1
DJ 7 2 71.42 12 28 -133.33
以上實現方法具如果設備在當前期間或在任何一個棚屋內至少有一次跌落,d工作正常。但是,如果設備不在當前時期,這並沒有顯示出任何改善。爲什麼?。有沒有辦法做同樣的事情?或者如何克服目前程序中的這種情況?
問題可以下列連結,改善列是保持空白設備「空爆斷路器(DJ)」 http://elocos.railnet.gov.in/Punctuality/comparative.aspx
對不起,我無法理解使用COALESCE(ColX,0)以及在哪裏放置這個&How。如果可能,請爲我寫一些代碼。謝謝 – Sunil
@Sunil:對不起,我不確定。我添加更新到我的答案,我希望能回答你的問題。 – Serg
非常感謝您的先生。 – Sunil