【问题标题】:T-SQL query for the following table definition下表定义的 T-SQL 查询
【发布时间】:2015-08-10 11:06:29
【问题描述】:

我的数据库中有四个表,您可以在下面查看带有示例数据的示例。

表1tbl_ActivityName:

id  empId   ActivityName    
---------------------------------------
1    20      30_20
2    21      30_21
3    22      30_22

4    20      31_20
5    21      31_21
6    22      31_22

7    20      32_20
8    21      33_21
9    22      34_22

表2tbl_Monday:

id  empId   ActivityName    Plan    Actual
-------------------------------------------------------------------
1    20     30_20            1.1    1.1
2    20     30_20            1.2    1.1
3    21     30_21            1.3    1.2

表3tbl_Tuesday:

id  empId   ActivityName    Plan    Actual
------------------------------------
1    22       31_22          1.2    1.3
2    21       31_21          1.3    1.2
3    22       32_22          1.1    1.3

Table4tbl_Wednesday:

id  empId   ActivityName    Plan    Actual
-------------------------------------------------------------------
1    22       31_22          1.2    1.3
2    22       31_22          1.3    1.2
3    20       30_20          1.1    1.3

我试着为他们写一个查询,像这样:

select 
    a.empid, a.activityname,
    b.plan, b.actual,
    c.plan, c.actual,
    d.plan, d.actual 
from 
    tbl_activityname a,
    tbl_moday b,
    tb_tuesday c,
    tbl_wednesday d 
where 
    a.activityname = '30_20'
    and b.activityname = '30_20'
    and c.activityname = '30_20'

但是,这并没有返回我的预期结果。这是我预期的结果:

预期结果forempid = 20 and Activityname = 30_20 from tbl_ActivityName

activityName    empid   Monday_Plan Mondat_Actual   Tuesday_Plan    Tuesday_Actual  Wednesday_Plan  Wednesday_Actual
--------------------------------------------------------------------------------------------------------------------
30_20            20      1.1           1.1          -             -       1.1         1.3

预期结果forempid = 22 and Activityname = 31_22 from tbl_ActivityName

activityName    empid   Monday_Plan Mondat_Actual   Tuesday_Plan    Tuesday_Actual  Wednesday_Plan  Wednesday_Actual
--------------------------------------------------------------------------------------------------------------------
31_22               22          -           -          1.2            1.3               1.2            1.3
31_22               22          -           -           -              -                1.3            1.2

为什么我的查询没有得到这些预期结果?

【问题讨论】:

  • 到目前为止,您尝试过什么?请包括您的查询和您面临的问题
  • 在问题中使用编辑链接,不要向 cmets 添加代码
  • 您的查询有什么问题?它给出了什么结果,它与你想要的有什么不同?
  • 我将您的问题编辑为更好、更清晰的顺序。请编辑您在运行查询时确实获得的数据,并解释预期的数据,并说明为什么实际输出不足以满足您的需求。

标签: sql-server sql-server-2008


【解决方案1】:

您需要使用 OUTER JOIN,以便在其中一个表中没有匹配数据时仍能获得结果:

select 
    a.empid, a.activityname,
    b.plan, b.actual,
    c.plan, c.actual,
    d.plan, d.actual 
from tbl_activityname a
left outer join    tbl_monday b
  on a.activityname=b.activityname
left outer join    tb_tuesday c
  on a.activityname=c.activityname
left outer join     tbl_wednesday d 
  on a.activityname=d.activityname
where 
    a.activityname = '30_20'

【讨论】:

    猜你喜欢
    • 2011-09-07
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    相关资源
    最近更新 更多