SQL计算总价

SQL计算总价,sql,Sql,这里是新的(加上抱歉英语不好…),我在这里的两个表中遇到了一些SQL问题-销售和产品: Product: ProductID | Product | Price ____________________________ 1 | walnuts | 16 2 | cashew | 25 3 | peanuts | 4 Sells (each product kilograms sold): Day | walnuts | cashew | h

这里是新的(加上抱歉英语不好…),我在这里的两个表中遇到了一些SQL问题-销售和产品:

Product:

ProductID | Product | Price
____________________________
1         | walnuts | 16
2         | cashew  | 25
3         | peanuts | 4

Sells (each product kilograms sold):

Day | walnuts | cashew | hazelnut
__________________________________
1   | 2       | 3      | 1
2   | 8       | 6      | 25
3   | 1       | 3      | 12

我想显示的是第2天的总收入(例如),那么我如何计算呢?

这不是很容易维护,但如果这是您的实际数据,出于某种原因,您不想手工计算,那么这种模式应该可以工作。(未在真实数据上测试,但希望足够接近,让您继续)


你设计桌子的方法不好

**Item table:**

    product_id | product_name | price
    __________________________________
    1          | Some1        | 20
    2          | Some2        | 30
    3          | Some3        | 40

    **sale table :**

    sale_id  |  product_id | quantity 
    __________________________________
    1        | 2           | 2
    2        | 1           | 1
    3        | 3           | 2
现在应用查询:

SELECT sale.quantity*item.price as TOTAL FROM item,sale WHERE item.product_id=sale.product_id;

如果有更多列,则可以应用更多筛选器。

1。更改您的表格结构

SELECT SUM(prince)
FROM (
    SELECT CASE 
         WHEN p.product = "walnuts"
          THEN (s.walnuts * p.price)
         WHEN p.product = "cashew"
          THEN (s.cashew * p.price)
         WHEN p.product = "hazelnut"
          THEN (s.hazelnut * p.price)
         ELSE NULL
           END AS price
    FROM sells s
    JOIN product p 
    WHERE Day = 2
);
您的数据库表结构不好。 使用产品种类作为列不是一种方式。而是使用以下结构:

Product:

ProductID | Product | Price
____________________________
1         | walnuts | 16
2         | cashew  | 25
3         | peanuts | 4

Sells (each product kilograms sold):

Day | ProductID | Amt    | Price
__________________________________
1   | 1         | 2      | 15
1   | 2         | 3      | 25
1   | 3         | 1      | 4
2   | 1         | 8      | 16
2   | 2         | 6      | 23
2   | 3         | 25     | 5
3   | 1         | 1      | 16
3   | 2         | 3      | 25
3   | 3         | 12     | 4
我把价格列放在销售表中,因为实际销售价格每天都可能变化

一旦表格在这个结构中,你们就可以做分组汇总了。 以下是MySQL查询:

SELECT SUM(Amt * Price) AS total FROM Sells WHERE Day=2 GROUP BY Day
如果您想每天检查一次产品,并查看产品本身的详细信息,您可以尝试以下操作:

SELECT p.ProductID, p.Product, SUM(s.Amt * s.Price) AS total 
    FROM Sells AS s
    LEFT JOIN Product AS p ON s.ProductID = p.ProductID
WHERE s.Day=2 GROUP BY s.Day, s.Product
2。如果无法更改,则…


@Kanagaraj Dhanapal的答案将是你的。

你应该改变你的桌子设计。不要使用值是列名如果这是SQL Server,您可以使用
UNPIVOT
子句简化此操作,但在任何情况下,您可能都不希望值作为列名。是的。。我猜,但我现在被卡住了:/有什么建议吗?第一个问题。您正在使用哪个数据库管理系统?????这是最重要的信息。dbms之间的语法可能会有所不同。由于您刚刚开始,我建议您更改表设计。每个表上只有3条记录,您无法解决它。想象一下,当有数百万条记录时。
SELECT p.ProductID, p.Product, SUM(s.Amt * s.Price) AS total 
    FROM Sells AS s
    LEFT JOIN Product AS p ON s.ProductID = p.ProductID
WHERE s.Day=2 GROUP BY s.Day, s.Product