繁体   English   中英

根据另一个表结果选择并分组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM