2013-12-18 95 views
0

該商家有一個tendertype類型的信用卡或借記卡,計算在同一行,但我需要分割這兩個金額,以提供信用和借記金額。 有一行表示名爲TenderType的借記卡的信用卡,但我不能將Tendertype分配給一個,否則它不起作用,如果我使用CASE,則該總和在腳本中不起作用。如何將一行分成兩部分?

任何人都可以請協助嗎?

我的代碼:

USE [PAYAT] 
SELECT month(t.DateCreated) AS Month, 
    c.name AS [Retailer], 
    h.name AS [Bill Issuer], 
    count(t.RecID) AS [Total_Transactions], 
    sum(t.RetailFee) AS [RetailFee], 
    sum([email protected]) AS [[email protected]_Fee (Incl)], 
    sum([email protected]/1.14)AS [[email protected]_Fee (excl)], 
    sum(t.CashHandlingFee) AS [Cash_Fee], 
    sum(t.MerchantFee) AS [Merchant_Fee] 
FROM [email protected] t (nolock) 
    LEFT OUTER JOIN [email protected] c (nolock) ON t.RetailID = c.RecID 
    LEFT OUTER JOIN [email protected] h (nolock) ON t.ClientID = h.RecID 
    WHERE t.DateCreated > '2013-10-01 00:10:00.000' 
    AND t.DateCreated < '2013-10-01 23:59:59.000' 
    Group BY c.name,h.name, month(t.DateCreated) 
    ORDER BY c.name 
+0

這是用於MySQL還是MS SQL Server? –

+0

對不起,我仍然使用該網站,它不斷給我錯誤,當我把我的代碼在評論部分 –

+0

我調整了代碼,因爲我有它在這一刻,結果是正確的我只需要拆分MerchantFee –

回答

0

你的問題說:「拆一排爲兩個」,但根據描述,我假設你的意思是「一個欄分成兩個」 ......如果是這樣,我相信這是你想要什麼:

USE [PAYAT] 

SELECT 
    month(t.DateCreated) AS Month, 
    c.name AS [Retailer], 
    h.name AS [Bill Issuer], 
    count(t.RecID) AS [Total_Transactions], 
    sum(t.RetailFee) AS [RetailFee], 
    sum([email protected]) AS [[email protected]_Fee (Incl)], 
    sum([email protected]/1.14)AS [[email protected]_Fee (excl)], 
    sum(t.CashHandlingFee) AS [Cash_Fee], 

    -- removed 
    --sum(t.MerchantFee) AS [Merchant_Fee], 

    -- added case statements to separate merchant fees into two categories 
    sum(CASE WHEN TenderType='CreditCard' THEN t.MerchantFee ELSE 0 END) AS [Merchant_Fee_Credit_Card], 
    sum(CASE WHEN TenderType='DebitCard' THEN t.MerchantFee ELSE 0 END) AS [Merchant_Fee_Debit_Card] 

FROM 
    [email protected] t (nolock) 
    LEFT OUTER JOIN [email protected] c (nolock) ON t.RetailID = c.RecID 
    LEFT OUTER JOIN [email protected] h (nolock) ON t.ClientID = h.RecID 
WHERE 
    t.DateCreated > '2013-10-01 00:10:00.000' 
    AND t.DateCreated < '2013-10-01 23:59:59.000' 
GROUP BY 
    c.name,h.name, month(t.DateCreated) 
ORDER BY 
    c.name 
    ; --added 
+0

謝謝大衛,這工作完美。你是我的英雄哈哈 –

0

得到兩個不同的結果集,並聯合他們。就像這樣:

USE [PAYAT] 
SELECT * FROM 
(
SELECT month(t.DateCreated) AS Month, 
    c.name AS [Retailer], 
    h.name AS [Bill Issuer], 
    count(t.RecID) AS [Total_Transactions], 
    sum(t.RetailFee) AS [RetailFee], 
    sum([email protected]) AS [[email protected]_Fee (Incl)], 
    sum([email protected]/1.14)AS [[email protected]_Fee (excl)], 
    sum(t.CashHandlingFee) AS [Cash_Fee], 
    sum(t.MerchantFee) AS [Merchant_Fee] 
FROM [email protected] t (nolock) 
    LEFT OUTER JOIN [email protected] c (nolock) ON t.RetailID = c.RecID 
    LEFT OUTER JOIN [email protected] h (nolock) ON t.ClientID = h.RecID 
WHERE TenderType='CreditCard' 

UNION 

SELECT month(t.DateCreated) AS Month, 
    c.name AS [Retailer], 
    h.name AS [Bill Issuer], 
    count(t.RecID) AS [Total_Transactions], 
    sum(t.RetailFee) AS [RetailFee], 
    sum([email protected]) AS [[email protected]_Fee (Incl)], 
    sum([email protected]/1.14)AS [[email protected]_Fee (excl)], 
    sum(t.CashHandlingFee) AS [Cash_Fee], 
    sum(t.MerchantFee) AS [Merchant_Fee] 
FROM [email protected] t (nolock) 
    LEFT OUTER JOIN [email protected] c (nolock) ON t.RetailID = c.RecID 
    LEFT OUTER JOIN [email protected] h (nolock) ON t.ClientID = h.RecID 
WHERE TenderType='DebitCard' 
) A 
+0

我不斷收到以下錯誤:「列'[email protected]'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。」我試着把它放在組中,但它不起作用。 –

+0

好吧,我明白了,Thanx –

+0

仍然沒有工作,它給我空行 –