2017-07-31 166 views
-2

我想創建一個子查詢來顯示接受的交易和失敗的事務的結果可以任何人指導我如何做到這一點? 這是我的查詢結果:SQL子查詢顯示百分比

SELECT ah.MCH_Code,mch.MCH_Name,SUM(isnull(cast(RB.PurchasesPassed as decimal),0))+SUM(isnull(cast(RB.capturesPassed as decimal),0))  
    +SUM(isnull(cast(RB.voidPurchasePassed as decimal),0))+SUM(isnull(cast(RB.creditPassed as decimal),0)) 
    +SUM(isnull(cast(RB.voidCreditPassed as decimal),0))+SUM(isnull(cast(RB.voidCapturesPassed as decimal),0)) 
    +SUM(isnull(cast(RB.authPassed as decimal),0))+SUM(isnull(cast(RB.voidAuthPassed as decimal),0)) as 'Passed Transactions', 
    SUM(isnull(cast(RB.PurchasesFailed as decimal),0))+SUM(isnull(cast(RB.capturesFailed as decimal),0)) 
    +SUM(isnull(cast(RB.voidPurchaseFailed as decimal),0))+SUM(isnull(cast(RB.creditFailed as decimal),0)) 
    +SUM(isnull(cast(RB.voidCreditFailed as decimal),0))+SUM(isnull(cast(RB.voidCapturesFailed as decimal),0)) 
    +SUM(isnull(cast(RB.authFailed as decimal),0))+SUM(isnull(cast(RB.voidAuthFailed as decimal),0)) as 'Failed Transactions' 
    FROM PSP.dbo.MCH_AccountHolder AH 
    LEFT OUTER JOIN [PSP].[dbo].[RECBUILD] RB ON rb.merchantId = ah.MCH_Code 
    LEFT OUTER JOIN PSP.dbo.USERS U on ah.UserId = u.USER_ID 
    LEFT OUTER JOIN PSP.dbo.MERCHANTS mch ON mch.MCH_Code = ah.MCH_Code 
    where u.USER_ID = '14655' 
    Group by ah.MCH_Code, u.USER_NAME,mch.MCH_Name 
+0

您的問題被標記爲MySQL,但代碼看起來像SQL Server。 –

+0

請提供樣品數據(DDL + DML)和預期結果。 –

+0

向我們展示數據庫模式,樣本數據和預期輸出。 \t請閱讀[**如何提問**](http://stackoverflow.com/help/how-to-ask) \t \t這裏是一個偉大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)來了解如何提高您的問題質量並獲得更好的答案。 \t [**如何創建一個最小,完整和可驗證示例**](http://stackoverflow.com/help/mcve) \t嘗試在http://rextester.com中創建示例 –

回答

1

這是怎麼回事?通過將原始查詢轉換爲CTE(基本上是一個已被移出主查詢結構以提高可讀性的子查詢),可以很容易地在其他表達式中使用您的計算值。這將輸出相同的行集,但將結果中包含的所有事務的已傳遞事務處理的百分比。

;With Totals as 
(
SELECT ah.MCH_Code,mch.MCH_Name,SUM(isnull(cast(RB.PurchasesPassed as decimal),0))+SUM(isnull(cast(RB.capturesPassed as decimal),0))  
    +SUM(isnull(cast(RB.voidPurchasePassed as decimal),0))+SUM(isnull(cast(RB.creditPassed as decimal),0)) 
    +SUM(isnull(cast(RB.voidCreditPassed as decimal),0))+SUM(isnull(cast(RB.voidCapturesPassed as decimal),0)) 
    +SUM(isnull(cast(RB.authPassed as decimal),0))+SUM(isnull(cast(RB.voidAuthPassed as decimal),0)) as 'Passed Transactions', 
    SUM(isnull(cast(RB.PurchasesFailed as decimal),0))+SUM(isnull(cast(RB.capturesFailed as decimal),0)) 
    +SUM(isnull(cast(RB.voidPurchaseFailed as decimal),0))+SUM(isnull(cast(RB.creditFailed as decimal),0)) 
    +SUM(isnull(cast(RB.voidCreditFailed as decimal),0))+SUM(isnull(cast(RB.voidCapturesFailed as decimal),0)) 
    +SUM(isnull(cast(RB.authFailed as decimal),0))+SUM(isnull(cast(RB.voidAuthFailed as decimal),0)) as 'Failed Transactions' 
    FROM PSP.dbo.MCH_AccountHolder AH 
    LEFT OUTER JOIN [PSP].[dbo].[RECBUILD] RB ON rb.merchantId = ah.MCH_Code 
    LEFT OUTER JOIN PSP.dbo.USERS U on ah.UserId = u.USER_ID 
    LEFT OUTER JOIN PSP.dbo.MERCHANTS mch ON mch.MCH_Code = ah.MCH_Code 
    where u.USER_ID = '14655' 
    Group by ah.MCH_Code, u.USER_NAME,mch.MCH_Name 
) 

SELECT *, Passed Transactions/(Passed Transactions + Failed Transactions) as PctPassed 
FROM Totals