将两个select语句与group by和order by组合在一起

时间:2020-10-06 21:17:51

标签: mysql sql

我有以下2条选择语句,它们可以单独工作并返回信息,但想知道是否有一种方法可以将它们联接/组合到具有各自独立行和列的报表中

Select Sum (amount) as PDCGross
From Desk D Left Join
     Master M
     on D.code = M.desk INNER JOIN
     pdc 
     ON m.number = pdc.number
Where teamid = 3
AND active = 1
And onhold is NULL
And deposit >='2020-10-01'
And deposit <= '2020-10-31'
Group by D.Name
Order by desk.Name Desc

Select Sum (amount) as GrossPDCC
FROM Desk D left JOIN
     Master M
     on D.code = M.Desk INNER JOIN
     DebtorCreditCards P 
     ON m.number = P.Number
Where teamid = 3
AND IsActive = 1
And OnHoldDate is NULL
And DepositDate >='2020-10-01'
And DepositDate <= '2020-10-31'
Group by D.Name 
Order by desk.Name Desc

第一个语句的返回结果

PDCPross

2500
1500
1300

第二条语句的结果是

PDCCGross
1500
1300
1000

我正在寻找的是

PDCPross   PDCCGross

2500        1500
1500        1300
1300        1000 

1 个答案:

答案 0 :(得分:0)

在MySQL v 8.0+或MariaDB 10.2 +上,您可以使用ROW_NUMBER()函数:

为每个查询分配ROW_NUMBER(),然后将两个查询都作为子查询。使用rownum结果加入查询,您应该可以并行查看结果。类似于以下查询示例:

SELECT A.PDCGross, B.GrossPDCC FROM
(SELECT ROW_NUMBER() OVER (ORDER BY D.Name DESC) AS rownum, SUM(amount) AS PDCGross
FROM Desk D LEFT JOIN
     MASTER M
     ON D.code = M.desk INNER JOIN
     pdc 
     ON m.number = pdc.number
WHERE teamid = 3
AND active = 1
AND onhold IS NULL
AND deposit >='2020-10-01'
AND deposit <= '2020-10-31'
GROUP BY D.Name
ORDER BY D.Name DESC) A JOIN
(SELECT ROW_NUMBER() OVER (ORDER BY D.Name DESC) AS rownum, SUM(amount) AS GrossPDCC
FROM Desk D LEFT JOIN
     MASTER M
     ON D.code = M.Desk INNER JOIN
     DebtorCreditCards P 
     ON m.number = P.Number
WHERE teamid = 3
AND IsActive = 1
AND OnHoldDate IS NULL
AND DepositDate >='2020-10-01'
AND DepositDate <= '2020-10-31'
GROUP BY D.Name 
ORDER BY D.Name DESC) B ON A.rownum=B.rownum;