2017-10-04 42 views
0

我想獲得所有id_user和creditRecieved的金額和creditUsed的金額的清單,我其實想添加第三個選項,提到左邊如果if任何。如果creditcceived比creditUsed更大。但是第一部分現在將輸出翻倍,因此我開始在StackOverflow中對此進行解釋,但是我無法使其工作。T-SQL(Azure)表給出雙重結果

SELECT 
    dbo.UserPurchase.CreditUsed, 
    dbo.UserCredit.CreditRecieved 

FROM 
(
    SELECT SUM(dbo.UserPurchase.creditUsed) AS CreditUsed 
    FROM dbo.UserPurchase 
) 

dbo.UserPurchase LEFT JOIN 

(
    SELECT SUM(dbo.UserCredit.creditRecieved) AS CreditRecieved 
    FROM dbo.UserCredit 
) 

dbo.UserCredit ON dbo.UserPurchase.id_user = dbo.UserCredit.id_user 

本數據來源於這兩個表

表dbo.UserCredit

id   id_user  creditRecieved PurchasePrice 
----------- ----------- -------------- ------------- 
1   1   150   750 
2   1   25    100 
3   2   65    15 

表dbo.UserPurchase

id   id_user  creditUsed date 
----------- ----------- ----------- ----------- 
1   1   175   NULL 
2   2   3   NULL 
3   2   2   NULL 

我想有以下結果

id_user  CreditRecieved CreditUsed CreditLeftOver 
----------- -------------- ----------- -------------- 
1   175   175   0 
2   65    5   60 
+1

請張貼預期的結果,實際的結果,張貼DDL,DML也有很大幫助 – TheGameiswar

+0

它不是在所有它會導致錯誤 –

回答

0

嘗試單獨查詢每個表:

SELECT users.id_user, coalesce(credit.received, 0) received, 
    coalesce(purchase.used, 0) Used, coalesce(credit.received, 0) - coalesce(purchase.used, 0) LeftOver, coalesce(purchase.purchaseCount, 0) purchaseCount 
FROM 
(
    select distinct id_user from dbo.UserCredit 
    union 
    select distinct id_user from dbo.UserPurchase 
) users 
left outer join 
(
    select id_user, sum(creditRecieved) received from dbo.UserCredit group by id_user 
) credit 
on users.id_user = credit.id_user 
left outer join 
(
    select id_user, sum(creditUsed) used, count(1) purchaseCount from dbo.UserPurchase group by id_user 
) purchase 
on users.id_user = purchase.id_user 
  • 請注意,在CreditRecieved一個錯字。它應該是CreditReceived
+0

它工作得很好,謝謝,請問您能否詳細說明一下?爲什麼他們不會在管理工作室的設計部分加載實際的表格?在這種情況下,我想擴展它:) –

+0

就像一個簡單的問題,我將如何能夠添加已購買的東西(使用信用)的用戶的計數? –

+0

我更新了有一個計數器的答案。關於你的第一個問題,我現在很忙。我會盡量在稍後詳述。對不起:(但重點是,你需要先分組數據,然後查詢兩個表已經分組。關於不加載管理工作室,這可能是因爲我不得不創建一個子查詢('... from(select)。 ..') –

0

如果我正確理解你,你想要id_user總結出來的creditUsed和creditRecieved(你的目的錯字?)?這將是該查詢:

SELECT p.id_user, SUM(p.creditUsed), SUM(u.creditRecieved) 
    FROM dbo.UserCredit u 
    LEFT JOIN dbo.UserPurchase p ON p.id_user = u.id_user 
GROUP BY p.id_user 
+0

這是正確的工作,我開始與此但不過,結果是加倍 –

+0

比在SELECT之後添加關鍵字DISTINCT。 – Bave

+0

如果您執行DISTINCT,則不會更改任何內容,仍會得到雙重結果 –

0

您可以使用此查詢

SELECT 
    C.id_user, 
    C.CreditRecieved, 
    P.CreditUsed, 
    C.CreditRecieved - P.CreditUsed CreditLeftOver 
FROM 
    (SELECT id_user, SUM(creditRecieved) CreditRecieved FROM UserCredit GROUP BY id_user) C 
    LEFT JOIN 
    (SELECT id_user, SUM(creditUsed) CreditUsed FROM UserPurchase GROUP BY id_user) P ON C.id_user = P.id_user