根据2张表格的数据计算总价

问题描述

我有类似的数据:

SALE

PR_KEY TRAN_ID   TRAN_NO  TRAN_DATE   CUSTOMER_ID USER_ID TABLE_ID PAY_TYPE_ID TOTAL_PRICE  
-------------------------------------------------------------------------------------------
187    SALE    130511164  2012-05-27    0000       ADMIN        59        1          0

Sale_detail

PR_KEY   FR_KEY    LIST_ORDER    ITEM_ID    PRICE     AMOUNT
--------------------------------------------------------------
281      187        0.0000       9          10000        3
282      187        0.0000       tom        20000        2

我的问题是:

  1. 我有什么方法可以通过计算sale.totalprice(对于同一(SD.Price * SD.Amount)+(SD.Price * SD.Amount))将数据推送到FR_KEY

  2. 或创建一个视图以显示总价格,并以相同的计算方式(SD.Price * SD.Amount)+ (SD.Price * SD.Amount)(对于每个FR_KEY)

这是针对SQL Server的,FR_KEY中的sale_detail引用了Pr_key表的Sale

我尝试-

SELECT dbo.SALE_DETAIL.PR_KEY,dbo.SALE_DETAIL.FR_KEY,SUM(dbo.SALE_DETAIL.PRICE * dbo.SALE_DETAIL.AMOUNT) AS Grand_total 
FROM dbo.SALE_DETAIL,dbo.SALE JOIN SALE s 
      on s.PR_KEY = SALE_DETAIL.FR_KEY 
WHERE SALE_DETAIL.PR_KEY = @FR_KEY 
ORDER BY PR_KEY

我想要的结果是:

PR_KEY TRAN_ID USER_ID TABLE_ID PAY_TYPE_ID TOTAL_PRICE
187    SALE    ADMIN   59       1            70000

解决方法

您提供的查询可以简化为:

SELECT sd.PR_KEY,sd.FR_KEY,SUM(sd.PRICE * sd.AMOUNT) AS Grand_total 
FROM dbo.SALE_DETAIL sd 
      on s.PR_KEY = SALE_DETAIL.FR_KEY 
WHERE sd.PR_KEY = @FR_KEY 
GROUP BY sd.PR_KEY,sd.FR_KEY;

不需要JOIN。但是GROUP BY是。

,

您可以在下面查询第二个问题。

SELECT
    SALE.PR_KEY,TRAN_ID,TRAN_NO,TRAN_DATE,CUSTOMER_ID,USER_ID,TABLE_ID,PAY_TYPE_ID,SUM(PRICE*AMOUNT) AS TOTAL_PRICE
FROM
    SALE_DETAIL
INNER JOIN SALE 
    ON SALE_DETAIL.FR_KEY = SALE.PR_KEY
GROUP BY
    SALE.PR_KEY,PAY_TYPE_ID
,

使用OUTER APPLY的完美机会

SELECT 
   PR_KEY,FR_KEY,O.Grand_total 
FROM dbo.SALE OUTER APPLY 
(
SELECT    SUM(PRICE * AMOUNT) AS Grand_total FROM SALE_DETAIL WHERE FR_KEY =PR_KEY
GROUP BY FR_KEY
) O
WHERE PR_KEY = @FR_KEY 
ORDER BY PR_KEY

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...