[英]select and group from based on another table result
我有两个桌子。 酒店服务和客人订单
酒店服务
s_id(pk) serviceType serviceName
guestOrder表:
g_id(pk) serviceType totalAmount balanceDue PaidAmount orderDate
我想从hotelservice表中获取基于serviceType的totalAmount,balanceDue,PaidAmount的总和。
也就是说,它将基于serviceType列对hotelservices.serviceType进行迭代和分组,并从guestorder表中获取关联的数据。
到目前为止我的尝试:
SELECT
g.OrderDate as saleDate,
g.ServiceType,
sum(g.TotalAmount) as TotalSales,
sum(g.BalanceDue) as TotalBalanceDue,
sum(g.PaidAmount) as TotalPaid,
h.ServicesType as services
FROM guestorder as g join hotelservices as h on g.ServiceType=h.ServicesType
group by saleDate
但这不是我想要的。 我需要它来显示其他serviceType,即使guestorder中没有任何内容。我也不知道我是否有意义。 提前致谢
也许反转您的联接,将其变成左外联接,然后使用GROUP BY修复问题,例如:
SELECT
g.OrderDate as saleDate,
g.ServiceType,
sum(g.TotalAmount) as TotalSales,
sum(g.BalanceDue) as TotalBalanceDue,
sum(g.PaidAmount) as TotalPaid,
h.ServicesType as services
FROM
hotelservices as h
LEFT JOIN guestorder as g ON g.ServiceType=h.ServicesType
GROUP BY
g.OrderDate,
g.ServiceType,
h.ServicesType;
i need it to show others serviceType even if it has nothing in the guestorder
从这个即时消息假设您有不匹配的数据...当您使用JOIN或INNER JOIN(因为那是JOIN默认值)时,您将过滤出所有不匹配的内容。 如果您想加入而不过滤,请进行LEFT JOIN ..
您应该添加COALESCE()以使您没有像这样的NULL值
SELECT
COALESCE(g.OrderDate, '') saleDate,
COALESCE(g.ServiceType, '') guestServiceType,
COALESCE(sum(g.TotalAmount), 0) TotalSales,
COALESCE(sum(g.BalanceDue), 0) TotalBalanceDue,
COALESCE(sum(g.PaidAmount), 0) TotalPaid,
h.ServicesType as services
FROM hotelservices h
LEFT JOIN guestorder g ON g.ServiceType = h.ServicesType
GROUP BY h.serviceType, saleDate
您的选择需要来自“酒店服务”表,这样您才可以拥有所有服务类型。然后左键联接guestorder表,这样就不会进行过滤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.