Multiply newly entered row with another column value and find Total Sum in SQL

匿名 (未验证) 提交于 2019-12-03 02:29:01

问题:

I have 4 tables here, I need to multiply newly entered row value in a table with another row and find the total sum using CustomerId:

CustomerTable:

CustomerId Name   EmailId ------------------------- 1          Paul   r@r.com 2          John   J@j.com 

LoyaltyPointTable:

LoyaltyPointsId LoyaltyType     Points --------------------------------------- 1               Registration       10 2               Loginstatus         1 3               Downloading        10 4               Redemming           1 5               Sharing            20 6               Refer              10 

LoyaltyDetailsTable:

 LoyaltyDetailsId LoyaltyPointsId CustomerId Dates  -------------------------------------------------   1                    1            1       2015-01-22    2                    2            1       2015-01-22    3                    3            2       2015-01-22   4                    3            1       2015-01-22    5                    4            1       2015-01-22   6                    4            1       2015-01-24    7                    5            1       2015-01-24  

This query works fine for the total sum for each LoyaltyType

SELECT       LoayaltyPointsTable.LoyaltyType,    COUNT(CustomerTable.CustomerId) AS UserActions,    SUM(LoayaltyPointsTable.Points) AS TotalPoints  FROM     LoayaltyPointsTable  JOIN     LoyaltyDetailsTable ON LoayaltyPointsTable.LoyaltyPointsId = LoyaltyDetailsTable.LoyaltyPointsId JOIN    CustomerTable ON CustomerTable.CustomerId = LoyaltyDetailsTable.CustomerId  WHERE    CustomerTable.CustomerId = 1 GROUP BY    LoyaltyDetailsTable.CustomerId ,LoayaltyPointsTable.LoyaltyType  

below RedeemPointsTable is created with relation to row redeeming in LoyaltyPointTable:

RedeemPointsTable:

 RedeemPointsId CustomerId ShopName BillNo Amount  ------------------------------------------------  1                   1      Mall x  4757    100  3                   1      Mall y  SH43    50  4                   1      Mall x  7743    10  6                   1      Mall x  s34a    60 

What I am expecting is before calculating the total sum, I want column Amount sum (100+50+10+60) * 1 in Redeeming in LoyaltyPointTable to be added with total points for each CustomerId

Expected output

LoyaltyType UserActions TotalPoints ------------------------------------- Downloading     1        10 Loginstatus     1         1 Redemming       4   (100+50+10+60)*1(here using Amount in RedeemPointsTable) Refer           1        10 Registration    1        10 Sharing         1        20 

User actions count is 4, it is based on the Amount he entered in RedeemPointsTable

Should I need to make changes in adding a foreign key column in RedeemPointsTable or can you point out my mistake?

Any help would be great.

回答1:

This is the query which returns desired result:

SELECT     LoyaltyPointTable.LoyaltyType,     CASE        WHEN LoyaltyPointTable.LoyaltyPointsId=4 THEN (SELECT COUNT(amount) FROM RedeemPointsTable where CustomerId=1)        ELSE COUNT(CustomerTable.CustomerId)     END as UserActions,     CASE        WHEN LoyaltyPointTable.LoyaltyPointsId=4 THEN (SELECT SUM(amount) FROM RedeemPointsTable where CustomerId=1)*Points       ELSE SUM(LoyaltyPointTable.Points)      END as TotalPoints FROM     LoyaltyPointTable  JOIN     LoyaltyDetailsTable ON LoyaltyPointTable.LoyaltyPointsId =     LoyaltyDetailsTable.LoyaltyPointsId JOIN    CustomerTable ON CustomerTable.CustomerId = LoyaltyDetailsTable.CustomerId  WHERE    CustomerTable.CustomerId = 1 GROUP BY    LoyaltyDetailsTable.CustomerId ,LoyaltyPointTable.LoyaltyType  

You can check it here



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!