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

时间:2016-11-16 06:35:38

标签: sql sql-server

查询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

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

5 个答案:

答案 0 :(得分:1)

快速更改以获得所需的结果是使用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() 

答案 1 :(得分:0)

您需要使用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 

答案 2 :(得分:0)

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() 

答案 3 :(得分:0)

您可以使用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() 

快乐编码

答案 4 :(得分:0)

试试这个

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