【问题标题】:Calculate total price from data of 2 tables从 2 个表格的数据计算总价
【发布时间】:2020-09-10 06:39:55
【问题描述】:

我有如下数据:

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. 我有什么方法可以通过计算(SD.Price * SD.Amount)+(SD.Price * SD.Amount)(对于相同的FR_KEY)将数据推送到sale.totalprice

  2. 或者创建一个视图来显示总价,同样的计算(SD.Price * SD.Amount)+ (SD.Price * SD.Amount)(对于每个FR_KEY)

这是针对 SQL Server 的,sale_detailFR_KEY 引用了 Sale 表的 Pr_key

我试过了-

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

【问题讨论】:

  • 你没有指定你想要的结果。
  • 我已经做了,遗失见谅

标签: sql sql-server tsql view


【解决方案1】:

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

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 是。

【讨论】:

    【解决方案2】:

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

    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,
        TRAN_ID,
        TRAN_NO,
        TRAN_DATE,
        CUSTOMER_ID,
        USER_ID,
        TABLE_ID,
        PAY_TYPE_ID
    

    【讨论】:

    • 它对我有用,但是当我创建视图时它不起作用stackoverflow.com/questions/63829293/…。你能帮我看看这里出了什么问题吗?
    • @PDA 我已经发布了答案,请立即查看。
    【解决方案3】:

    使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2021-08-29
      • 1970-01-01
      • 2021-01-27
      • 2021-07-10
      相关资源
      最近更新 更多