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