2016-11-16 76 views
0

查询查询1的1个SQL服务器2个查询来获得期望的结果

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 

结果:

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 

请人帮我把我需要的结果。

+0

是什么'Patient_Services.sdatetime = GETDATE()'的目的是什么?我怀疑你会得到任何结果的条件 – Squirrel

回答

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

编码快乐

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