【问题标题】:How to join blank tables如何连接空白表
【发布时间】:2015-08-28 13:15:51
【问题描述】:

表1

Names   assigned
Xyz.        123
Wxy.        456

表 2

Names. Unassigned
Xyz.        789
Tty.        123

表 3

Names.    Closed
Wxy.        456
Twr.        123

表 4

Names.  Open

此表不包含任何值

我想要像这样的输出

Names   assigned      unassigd      closed     open
Xyz.       123.          789.          0.        0
Wxy.       0             457.          0.        0          
Tty.       0             123.          0.        0  
Twr.       0             0             123.      0

如何加入他们?

【问题讨论】:

  • 您能否提供一个演示创建语句或提供更多细节您想要实现的目标?
  • 请提供建表语句。你提供的很痛苦
  • 但这是一回事。可悲的是,就像您的其他问题一样,您没有提供太多信息。我们可以提供帮助,而且我们中的大多数人都非常擅长 sql,但读心术却很糟糕。
  • 引入外连接概念

标签: mysql sql-server sql-server-2008


【解决方案1】:

试试

SELECT
    n.NAMES,
    ISNULL(t1.Assigned, 0) Assigned,
    ISNULL(t1.Unassigned, 0) Unassigned,
    ISNULL(t1.Closed, 0) Closed,
    ISNULL(t1.Open, 0) Open
FROM
    (           SELECT NAMES FROM Table1
        UNION   SELECT NAMES FROM Table2
        UNION   SELECT NAMES FROM Table3
        UNION   SELECT NAMES FROM Table4
    ) AS n
    LEFT JOIN (SELECT NAMES, SUM(Assigned) FROM Table1 GROUP BY NAMES) t1 ON n.NAMES = t1.NAMES
    LEFT JOIN (SELECT NAMES, SUM(Unassigned) FROM Table2 GROUP BY NAMES) t2 ON n.NAMES = t2.NAMES
    LEFT JOIN (SELECT NAMES, SUM(Closed) FROM Table3 GROUP BY NAMES) t3 ON n.NAMES = t3.NAMES
    LEFT JOIN (SELECT NAMES, SUM(Open) FROM Table4 GROUP BY NAMES) t4 ON n.NAMES = t4.NAMES  

【讨论】:

  • 但如果第一个表包含 3 条记录,而表 2 包含 5 条记录,那么它只需要 3 条记录
  • 创建一个 sql fiddle 以便我们看到你在说什么
猜你喜欢
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多