将两个SQL表与公共列组合在一起

时间:2015-05-14 14:56:26

标签: sql select join

我想要将两个表组合成一个表。它们有一些共同的列,但我无法弄清楚如何正确组合它们。

样品:

表A

Month | Year | Costumer_ID | Total_A |
--------------------------------------
  10  | 2014 |    222      |   50    | 
   1  | 2015 |    111      |  100    |
   2  | 2015 |    111      |  200    |
   4  | 2015 |    222      |  250    |

表B

Month | Year | Costumer_ID | Total_B |
--------------------------------------
  1   | 2015 |    111      |   50    |
  2   | 2015 |    333      |  100    |
  4   | 2015 |    222      |  250    |

期望的结果

Month | Year | Costumer_ID | Total_A | Total_B |
------------------------------------------------
 10   | 2014 |    222      |   50    |     0   |
  1   | 2015 |    111      |  100    |    50   |
  2   | 2015 |    111      |  200    |     0   |
  2   | 2015 |    333      |    0    |   100   |
  4   | 2015 |    222      |  250    |   250   |

逻辑如下:

如果客户的Total_A不为零,则在每年每个月的表A中,表中会有一条记录。因此,并非每年的所有月份都有每个客户的记录。

表B的工作方式与表A相同,但Total_B与Total_A不同。因此,对于特定的月份和年份,客户可能只在一个表中,在两个表中都没有记录。

我想生成一个表,其中包含每年每个月的每个客户的记录。如果表A或表B中有相应的记录,则每个表的Total_A和Total_B将显示在结果表中。如果在任何表中该特定月份和年份中没有该特定客户的记录,则结果表中的Total_A或/和Total_B将为零。

2 个答案:

答案 0 :(得分:3)

这看起来像full outer join。可以使用0生成coalesce

SELECT COALESCE(a.month, b.month) AS month, 
       COALESCE(a.year, b.year) AS year, 
       COALESCE(a.customerid, b.customerid) AS customerid, 
       COALESCE(total_a, 0) AS total_a, 
       COALESCE(total_b, 0) AS total_b
FROM   a
FULL OUTER JOIN b ON a.month = b.month AND
                     a.year = b.year AND
                     a.customerid = b.customerid

答案 1 :(得分:1)

执行$Service = Get-WmiObject -Class Win32_Service -computer REMOTESERVER -filter "name='SERVICENAME'" $service.change($null,$null,$null,$null,$null,$null,$null,"newpasswordhere") ,使用FULL OUTER JOIN获取0而不是NULL。

COALESCE