首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅显示卡支付

仅显示卡支付
EN

Stack Overflow用户
提问于 2019-09-19 21:13:53
回答 1查看 83关注 0票数 2

我在大约6年前设计了一个收银台系统,虽然代码看起来很糟糕,但它仍然在运行,我为之设计的咖啡馆一直在使用它。

然而,他们最近购买了一台卡片机,所以现在当他们想要查看当天的所有销售时,他们不会在两个不同的表中看到现金和卡。

事实证明,这很棘手,SQL把我难住了--我无法理解它。

下面是相关的表格:

类别

代码语言:javascript
复制
+----+-------------------+---------+------------+
| id |       name        | display |     ts     |
+----+-------------------+---------+------------+
|  1 | Drinks            |       1 | 2016-10-14 |
|  2 | General Snacks    |       1 | 2016-10-14 |
|  3 | Lunch Options     |       1 | 2016-10-14 |
| 4  | Conference Drinks |       1 | 2016-10-14 |
+----+-------------------+---------+------------+

产品

代码语言:javascript
复制
+----+-----------------+-------+------+-----+---------+------------+
| id |      name       | price | cost | cID | display |     ts     |
+----+-----------------+-------+------+-----+---------+------------+
|  1 | English Tea     |   0.6 | 0.09 |   1 |       1 | 2018-02-15 |
|  2 | Speciality Teas |   0.8 | 0.17 |   1 |       1 | 2018-02-15 |
|  3 | Crisps          |   0.6 | 0.41 |   3 |       1 | 2018-02-15 |
|  4 | Chocolate Bar   |   0.6 |  0.5 |   3 |       1 | 2018-02-15 |
+----+-----------------+-------+------+-----+---------+------------+

收据

代码语言:javascript
复制
+----+-----+-----+----------+------------+
| id | oID | pID | quantity |     ts     |
+----+-----+-----+----------+------------+
|  1 |   1 |  26 |        1 | 2013-11-21 |
|  2 |   2 |   6 |        2 | 2013-11-21 |
|  3 |   3 |   2 |        1 | 2013-11-21 |
|  4 |   4 |   3 |        1 | 2013-11-21 |
+----+-----+-----+----------+------------+

销售量

代码语言:javascript
复制
+----+-------+----------+------+------+--------+------------+
| id | total | tendered | flag | card | userID |     ts     |
+----+-------+----------+------+------+--------+------------+
|  1 |     1 |        1 |    0 |    0 |      4 | 2013-11-21 |
|  2 |     2 |        2 |    0 |    0 |      4 | 2013-11-21 |
|  3 |   0.6 |      0.6 |    0 |    0 |      4 | 2013-11-21 |
|  4 |   0.6 |      0.6 |    0 |    0 |      4 | 2013-11-21 |
+----+-------+----------+------+------+--------+------------+

请记住,这是我很久以前写的,我知道它并不完美。为了解释上面的内容,oID代表orderID,但实际上应该是salesID并链接到sales表ID,pID代表productID,是链接到products表的外键。类似地,cID实际上是categoryID

好的,咖啡馆经理点了一张桌子,如下所示:

代码语言:javascript
复制
+---------------+-----+------+-------+------------+-----------+
| Drinks        | Qty | Cost | Price | Cost-Total | Qty-total |
+---------------+-----+------+-------+------------+-----------+
| Juice Carton  | 2   | 33p  | 60p   | 66p        | £1.20     |
| Filter Coffee | 11  | 20p  | 80p   | £2.20      | £8.80     |
| Sub Total     | 13  |      |       | £2.86      | £10.00    |
| Grand Total   | 13  |      |       | £2.86      | £10.00    |
+---------------+-----+------+-------+------------+-----------+

这很好,我使用了以下SQL语句来生成以下代码:

代码语言:javascript
复制
SELECT 
categories.name AS category, products.name, pID, 
(SELECT SUM(quantity) FROM receipts s WHERE s.pID = r.pID AND DATE(s.ts) = CURDATE()) AS quantity, 
products.price,
products.cost 
FROM receipts r 
LEFT JOIN products ON r.pID = products.id 
LEFT JOIN categories ON products.cID = categories.id 
WHERE DATE(r.ts) = CURDATE()
GROUP BY r.pID ORDER BY categories.name;

但是,现在我需要显示两个表,一个用于卡,一个用于现金。现在,在sales表中的卡片列中使用1标记了信用卡支付。所以我试着写下:

代码语言:javascript
复制
SELECT 
categories.name AS category, products.name, pID, 
(SELECT SUM(quantity) FROM receipts s WHERE s.pID = r.pID AND DATE(s.ts) = CURDATE()) AS quantity, 
products.price,
products.cost 
FROM receipts r 

LEFT JOIN products ON r.pID = products.id 
LEFT JOIN sales x on r.oID = x.id 
LEFT JOIN categories ON products.cID = categories.id 

WHERE DATE(r.ts) = CURDATE() AND x.card = 1 
GROUP BY r.pID ORDER BY categories.name;

但是,它只显示与第一个查询相同的数据。我知道问题出在哪里-它在嵌入的SELECT语句(AS quantity)中,因为我没有在其中指定是信用卡支付还是现金支付。我以为只需添加x.card = 1 a,end就可以做到这一点,但显然不行。

有人能帮我解决这个SQL问题吗?我如何将卡条件放入嵌入式SQL中,因为它是从收据中检索的,并且收据没有保存关于它是否是信用卡支付的信息?

我真的不知道该怎么做。我们将非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2019-09-19 21:44:58

它的基本形式是:

SELECT * FROM Sales WHERE card = 1

将仅显示卡支付

这将为您提供从今天开始的任何销售:

代码语言:javascript
复制
SELECT *
  FROM 
    categories,
    products,
    sales,
    reciepts,
  LEFT JOIN
    products ON reciepts.pID
    sales ON reciepts.oID
    categories ON products.cID
  WHERE DATE(s.ts) = CURDATE() 
    AND sales.card = 1

`

所以你在那里得到的是正确的。你还遗漏了一些东西。

在我看来,到目前为止,您还没有选择sales表,这可能是您的问题。

您是否尝试过在SQL management studio中运行代码并查看结果?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58011858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档