Sql server 2012 SQL Server使用单个查询中不同表的计数返回多个值

Sql server 2012 SQL Server使用单个查询中不同表的计数返回多个值,sql-server-2012,Sql Server 2012,我在SQL Server 2012数据库中有不同的表,其结构如下: userstbl有用户全名和ID-->这有牙医的信息 bookingblhas Id,patient\u Id(与另一个表相关,包含患者的信息文件),booking\u date,InvoiceID(与另一个表发票相关) servicetbl:ID、service\u ID(与另一个具有服务成本的表相关)、booking\u ID invoicetbl:标识,总成本 我想从我的过程中得到的是返回: 用户ID为DrD,全名为D

我在SQL Server 2012数据库中有不同的表,其结构如下:

  • userstbl
    有用户全名和ID-->这有牙医的信息

  • bookingbl
    has Id,patient\u Id(与另一个表相关,包含患者的信息文件),booking\u date,InvoiceID(与另一个表发票相关)

  • servicetbl
    :ID、service\u ID(与另一个具有服务成本的表相关)、booking\u ID

  • invoicetbl
    :标识,总成本

我想从我的过程中得到的是返回:

用户ID为DrD,全名为DrName,预订数量,服务数量,发票总额

基于给定的日期

我尝试了以下操作,但仍然缺少smthn:

create Proc SelectDrWork(@date Date)
as
begin
    select 
        userstbl.[user_id],userstbl.full_name,
        count(bookingtbl.bookingID), 
        count(servicetbl.serviceID),
        sum(invoice.Total)
    from 
        userstbl, bookingtbl, Servicetbl, invoice
    where 
        userstbl.IsActivated = 'True' 
        and userstbl.description = 'Dr'
        and bookingtbl.dr_id = [user_id] 
        and cast(bookingtbl.[date] as date) = cast(@date as date)
        and servicetbl.booking_id = book_number 
        and invoice.inv_id = bookingtbl.invoiceID 
    group by 
        [user_id], book_number, diaganosis_serv_id
end

我找到了答案。非常简单:

ALTER Proc SelectDrWork(@date Date)
as
begin
select userstbl.[user_id],userstbl.full_name,count(distinct book_number) as BookingCount,count(service_id)as ServiceCount,sum(invoice.Total) as Total
from userstbl, bookingtbl, diaganosistbl, invoice
where userstbl.IsActivated='True' and userstbl.description='Dr'
and bookingtbl.dr_id=[user_id] 
and cast(bookingtbl.[date] as date)= cast(@date as date)
and diaganosistbl.booking_id=book_number 
and invoice.inv_id=bookingtbl.invoiceID 
group by [user_id],full_name
end

-在ANSI-92 SQL标准(20多年前)中,旧式的逗号分隔的表列表样式被正确的ANSI
JOIN
语法所取代,并且它的使用非常简单discouraged@marc_s谢谢你的建议。我在这个领域还是新手,我正在努力提高我的技能。