Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 匹配两个或多个列值并显示在SQL server中的单个列中_Sql Server - Fatal编程技术网

Sql server 匹配两个或多个列值并显示在SQL server中的单个列中

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

我在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

日期------金额------支出金额
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

你想做什么?请发布您的问题如果两张表都完全错过了某个日期,会发生什么情况?您尝试过做什么?请发布您的问题如果两张表都完全错过了某个日期,会发生什么情况?