外部连接多个表,将所有行保持在共同的列中

时间:2017-12-13 08:43:07

标签: sql tsql

我对SQL很陌生 - 希望你能提供帮助:

我有几个表共有3列:ObjNoDate(year-month)Product。 每个表格都有另外一列,代表经济价值(salescountnetsalesplan ..)

我需要加入3个常用列的所有表格。对于3个公共列的每个现有组合,结果必须有一行。并非每个表都存在每种组合。

如果我执行完全外连接,我会为每个表获得ObjNoDate等,但只需要一次。

我怎样才能做到这一点?

+--------------+-------+--------+---------+-----------+
|   tblCount   |       |        |         |           |
+--------------+-------+--------+---------+-----------+
|              | ObjNo | Date   | Product | count     |
|              | 1     | 201601 | Snacks  | 22        |
|              | 2     | 201602 | Coffee  | 23        |
|              | 4     | 201605 | Tea     | 30        |
|              |       |        |         |           |
| tblSalesPlan |       |        |         |           |
|              | ObjNo | Date   | Product | salesplan |
|              | 1     | 201601 | Beer    | 2000      |
|              | 2     | 201602 | Sancks  | 2000      |
|              | 5     | 201605 | Tea     | 2000      |
|              |       |        |         |           |
|              |       |        |         |           |
| tblSales     |       |        |         |           |
|              | ObjNo | Date   | Product | Sales     |
|              | 1     | 201601 | Beer    | 1000      |
|              | 2     | 201602 | Coffee  | 2000      |
|              | 3     | 201603 | Tea     | 3000      |
+--------------+-------+--------+---------+-----------+

THX 德文

1 个答案:

答案 0 :(得分:0)

听起来你正在使用COALESCE,它会为你提供每张桌子的每一个字段。您可能只想从一个表中获取值,因此您应该明确要在结果中包含哪些字段。

如果您不确定哪个表格会为每个案例创建一个记录(即不能保证在任何特定表格中都有记录),您可以使用SELECT COALESCE(tbl1.ObjNo, tbl2.ObjNo, tbl3.ObjNo) AS ObjNo, .... tbl1.Sales, tbl2.Count, tbl3.Netsales 函数来获取在每种情况下都是第一个非空值。

Attrition_edufield <- myds %>%
select(Attrition, EducationField) %>%
group_by(Attrition, EducationField) %>%
summarize(count = n())