【发布时间】:2017-05-13 02:02:59
【问题描述】:
我正在编写一个 SQL 语句来获取 Recordset 中的一些值,我将使用它来将结果传输到 Excel 中窗体上的 TextBoxes 中。涉及的表格有:
客户 -> 客户 ID、名字、姓氏、电话号码
发票 -> InvoiceId、CustomerId、CarModel、CarColor、CarPlate
维修 -> RepairId、InvoiceId、TypeOfRepair、PartOfCar、价格
服务 -> ServiceId、InvoiceId、日期、状态
当客户来到车库时,会创建一张与该客户相关联的发票。一张发票可以有多个维修。客户没有修车就走了,但发票在那里。如果客户决定修理汽车,则会创建一个服务,该服务以状态“正在处理...”开始。服务完成后,状态变为“Waiting for Check Out...”
我想使用 SQL 语句检索特定 InvoiceId 的以下值(列):
CarModel、Color、Plate、CustomerName (FirstName LastName)、PaintingTotalValue(其中“Painting”是“Type”列中的一种类型)、OtherTotalValue(此发票中所有其他类型维修的总价)、总价(总价,即画+其他)。
我编写了以下内容来获取值,但我不知道如何获取 PaintingTotalValue 和 OtherTotalVALue。
SELECT i.CarModel, i.Color, i.Plate, CONCAT(c.FirstName,' ',c.LastName) AS Name, FORMAT(SUM(r.Price),2) AS TotalPrice
FROM Services AS s INNER JOIN Invoices AS i ON s.invoiceId=i.invoiceId
INNER JOIN Repairs AS r ON s.invoiceId=r.invoiceId
INNER JOIN Customers AS c ON i.customerId=c.customerId
WHERE s.invoiceId = 15
【问题讨论】:
-
您遇到错误了吗?它说什么?您的查询有一个聚合函数 (
SUM) -GROUPedBY的记录如何?未聚合的SELECT字段需要在GROUP BY子句中。 -
我写的声明工作正常,问题是它只给了我总价。由于 Service 表上始终只有一个唯一 invoiceId,因此返回的 Recordset 仅包含一行,这就是我没有使用 GROUP BY 的原因...我试图在“SELECT”和“FROM”之间包含另外两个值(列),这将是与 invoiceId 和 type=Painting 匹配的价格总和,另一列是与 invoiceId 匹配且类型不是绘画的维修的 TotalPrice (SUM)(即所有其他类型)
-
这是 MySQL 还是 SQL Server?因为两者的语法都不一样。
-
我在 Excel (VBA) 上使用 ODBC 对象,与 MySQL 连接
-
服装师是组装服装的人,即演员所穿的衣服——因此是购车市场的一小部分。也许你在想 customers