繁体   English   中英

SQL Server 2查询以获得所需的结果

[英]SQL Server 2 queries to get desired result

查询1

SELECT        
    Admin_Services.S_Name, SUM(Patient_Services.Amount) AS Total
FROM            
    Patient_Services 
INNER JOIN
    Admin_Services ON Patient_Services.S_ID = Admin_Services.S_ID
WHERE 
    Admin_Services.S_ID = 1606 OR 
    Admin_Services.S_ID = 28451 OR 
    Admin_Services.S_ID = 28449 
    AND Patient_Services.sdatetime = getdate()  
GROUP BY
    Admin_Services.S_Name

查询结果1:

S_Name               |  Total
Anesthesia Charges   |  20000
Consultant Fee       |  50200
Operation Charges    |  31000

查询2

SELECT        
    'Pathology' as S_Name, SUM(Patient_Services.Amount) AS Total
FROM            
    Patient_Services 
INNER JOIN
    Admin_Services ON Patient_Services.S_ID = Admin_Services.S_ID
WHERE
    Patient_Services.TB_ID IS NOT NULL
    AND Patient_Services.sdatetime = getdate() 

查询结果2

S_Name      | Total
Pathology   | 109576

我想要的结果如下所示:

S_Name              | Total
Anesthesia Charges  | 20000
Consultant Fee      | 50200
Operation Charges   | 31000
Pathology           | 109576

请有人帮助我获得所需的结果。

快速更改以获取所需结果是使用UNION ALL合并两个查询的结果

-- query 1
SELECT        Admin_Services.S_Name,Sum(Patient_Services.Amount) as Total
FROM            Patient_Services INNER JOIN
                         Admin_Services ON Patient_Services.S_ID = Admin_Services.S_ID
                         where Admin_Services.S_ID = 1606 OR Admin_Services.S_ID = 28451 OR Admin_Services.S_ID = 28449 And Patient_Services.sdatetime = getdate()  
Group By Admin_Services.S_Name

UNION ALL

-- query 2
SELECT        'Pathology' as S_Name, Sum(Patient_Services.Amount) as Total
FROM            Patient_Services INNER JOIN
                         Admin_Services ON Patient_Services.S_ID = Admin_Services.S_ID
                         where Patient_Services.TB_ID is not null And Patient_Services.sdatetime = getdate() 

您需要使用GROUP BY WITH ROLLUP

SELECT CASE
         WHEN Grouping(Admin_Services.S_Name) = 0 THEN Admin_Services.S_Name
         ELSE 'Pathology'
       END                          Admin_Services.S_Name,
       Sum(Patient_Services.Amount) AS Total
FROM   Patient_Services
       INNER JOIN Admin_Services
               ON Patient_Services.S_ID = Admin_Services.S_ID
WHERE  Admin_Services.S_ID = 1606
        OR Admin_Services.S_ID = 28451
        OR Admin_Services.S_ID = 28449
           AND Patient_Services.sdatetime = Getdate()
GROUP  BY Admin_Services.S_Name WITH rollup 
SELECT        
Admin_Services.S_Name, SUM(Patient_Services.Amount) AS Total
FROM            
Patient_Services 
INNER JOIN
Admin_Services ON Patient_Services.S_ID = Admin_Services.S_ID
 WHERE 
Admin_Services.S_ID = 1606 OR 
Admin_Services.S_ID = 28451 OR 
Admin_Services.S_ID = 28449 
AND Patient_Services.sdatetime = getdate()  
GROUP BY
Admin_Services.S_Name

UNION

SELECT        
'Pathology' as S_Name, SUM(Patient_Services.Amount) AS Total
FROM            
Patient_Services 
INNER JOIN
Admin_Services ON Patient_Services.S_ID = Admin_Services.S_ID
WHERE
Patient_Services.TB_ID IS NOT NULL
AND Patient_Services.sdatetime = getdate() 

您可以将UNION ALL用于所需的上述结果。

    Select        
    Admin_Services.S_Name, SUM(Patient_Services.Amount) AS Total
    From            
    Patient_Services 
    Inner Join
    Admin_Services ON Patient_Services.S_ID = Admin_Services.S_ID
    Where
    Admin_Services.S_ID = 1606 OR 
    Admin_Services.S_ID = 28451 OR 
    Admin_Services.S_ID = 28449 
    And Patient_Services.sdatetime = getdate()  
    Group By
    Admin_Services.S_Name

    Union All

    Select      
    'Pathology' as S_Name, SUM(Patient_Services.Amount) AS Total
    From          
    Patient_Services 
    Inner Join
    Admin_Services ON Patient_Services.S_ID = Admin_Services.S_ID
    Where
    Patient_Services.TB_ID Is Not Null
    And Patient_Services.sdatetime = getdate() 

快乐编码

尝试这个

SELECT        
case when Patient_Services.TB_ID IS NOT NULL then'Pathology' else  Admin_Services.S_Name end , SUM(Patient_Services.Amount) AS Total
FROM            
Patient_Services 
INNER JOIN
Admin_Services ON Patient_Services.S_ID = Admin_Services.S_ID
WHERE 
Admin_Services.S_ID = 1606 OR 
Admin_Services.S_ID = 28451 OR 
Admin_Services.S_ID = 28449 
AND Patient_Services.sdatetime = getdate()  
AND Patient_Services.TB_ID IS NOT NULL
GROUP BY
Admin_Services.S_Name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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