Sql server 匹配两个或多个列值并显示在SQL server中的单个列中
我在SQL Server中有两个表。 <强> TBLY发票如贝娄Sql server 匹配两个或多个列值并显示在SQL server中的单个列中,sql-server,Sql Server,我在SQL Server中有两个表。 TBLY发票如贝娄BR> 付款日期----金额 2017-08-23 | 2300 2017-08-23 | 2400 2017-08-23 | 2500 2017-08-24 | 5000 第二桌 费用> >如贝娄> BR> ExpDate---ExpAmount 2017-08-23 | 1700 2017-08-25 | 2800 2017-08-25 | 2900 我想联接这两个表并显示日期的收据金额和费用金额之和。 我希望输出显示为bellow
BR> 付款日期----金额
2017-08-23 | 2300
2017-08-23 | 2400
2017-08-23 | 2500
2017-08-24 | 5000 第二桌 <强>费用> <强> >如贝娄> BR> ExpDate---ExpAmount
2017-08-23 | 1700
2017-08-25 | 2800
2017-08-25 | 2900
我想联接这两个表并显示日期的收据金额和费用金额之和。 我希望输出显示为bellow 日期------金额------支出金额
2017-08-23 | 7200 | 1700
2017-08-24 | 5000 | 0
2017-08-25 | 0 | 5700
两个表之间的完全外部联接将使您接近所需的输出。我之所以说关闭,是因为这种方法仍然存在给定日期不出现在两个表中的问题。在这种情况下,这个日期根本不会出现在您的结果中。为了解决这个问题,一个选择是加入一个包含所有日期的日历表。请注意,我按日期汇总了这两个表以获得总金额
SELECT
COALESCE(t1.PayDate, t2.ExpDate) AS Date,
COALESCE(t1.Amount, 0) AS Amount,
COALESCE(t2.ExpAmount, 0) AS ExpAmount
FROM
(
SELECT PayDate, SUM(Amount) AS Amount
FROM tbl_Invoice
GROUP BY PayDate
) t1
FULL OUTER JOIN
(
SELECT ExpDate, SUM(ExpAmount) AS ExpAmount
FROM tbl_Expense
GROUP BY ExpDate
) t2
ON t1.PayDate = t2.ExpDate
此处演示:
两个表之间的完整外部联接将使您接近所需的输出。我之所以说关闭,是因为这种方法仍然存在给定日期不出现在两个表中的问题。在这种情况下,这个日期根本不会出现在您的结果中。为了解决这个问题,一个选择是加入一个包含所有日期的日历表。请注意,我按日期汇总了这两个表以获得总金额
SELECT
COALESCE(t1.PayDate, t2.ExpDate) AS Date,
COALESCE(t1.Amount, 0) AS Amount,
COALESCE(t2.ExpAmount, 0) AS ExpAmount
FROM
(
SELECT PayDate, SUM(Amount) AS Amount
FROM tbl_Invoice
GROUP BY PayDate
) t1
FULL OUTER JOIN
(
SELECT ExpDate, SUM(ExpAmount) AS ExpAmount
FROM tbl_Expense
GROUP BY ExpDate
) t2
ON t1.PayDate = t2.ExpDate
此处演示:
用最简单的方法试试这个
select date , sum(Amount) as Amount ,sum(ExpAmount) as ExpAmount from
(select PayDate as date , Amount, 0 as ExpAmount from tbl_Invoice
union
select ExpDate as date,0 as Amount, ExpAmount from tbl_Expense ) as a
group by date
输出
date Amount ExpAmount
2017-08-23 00:00:00.000 7200 1700
2017-08-24 00:00:00.000 5000 0
2017-08-25 00:00:00.000 0 5700
用最简单的方法试试这个
select date , sum(Amount) as Amount ,sum(ExpAmount) as ExpAmount from
(select PayDate as date , Amount, 0 as ExpAmount from tbl_Invoice
union
select ExpDate as date,0 as Amount, ExpAmount from tbl_Expense ) as a
group by date
输出
date Amount ExpAmount
2017-08-23 00:00:00.000 7200 1700
2017-08-24 00:00:00.000 5000 0
2017-08-25 00:00:00.000 0 5700
一种方法是获取您感兴趣的所有日期,并使用CROSS APPLY获取每个日期的值之和:
SELECT
Dates.Date,
ISNULL(Invoices.Amount, 0) AS Amount,
ISNULL(Expenses.ExpAmount, 0) AS ExpAmount
FROM (SELECT ExpDate As [Date] FROM tbl_Expense UNION SELECT PayDate FROM tbl_Invoice) AS Dates
CROSS APPLY (
SELECT SUM(Amount) as Amount FROM tbl_Invoice WHERE PayDate = [Date]) AS Invoices
CROSS APPLY (
SELECT SUM(ExAmount) as ExpAmount FROM tbl_Expense WHERE ExpDate = [Date]) AS Expenses
一种方法是获取您感兴趣的所有日期,并使用CROSS APPLY获取每个日期的值之和:
SELECT
Dates.Date,
ISNULL(Invoices.Amount, 0) AS Amount,
ISNULL(Expenses.ExpAmount, 0) AS ExpAmount
FROM (SELECT ExpDate As [Date] FROM tbl_Expense UNION SELECT PayDate FROM tbl_Invoice) AS Dates
CROSS APPLY (
SELECT SUM(Amount) as Amount FROM tbl_Invoice WHERE PayDate = [Date]) AS Invoices
CROSS APPLY (
SELECT SUM(ExAmount) as ExpAmount FROM tbl_Expense WHERE ExpDate = [Date]) AS Expenses
你想做什么?请发布您的问题如果两张表都完全错过了某个日期,会发生什么情况?您尝试过做什么?请发布您的问题如果两张表都完全错过了某个日期,会发生什么情况?