2017-02-16 141 views
0

我这里有两个表SQL Server查询连接两个表

表1

​​

表2

STUDENT |MED_TYPE|REMAINING_MED|ACTIVE 
--------|--------|-------------|------ 
miko |3b  |1.0   |1 
kite |1b  |6.0   |1 
kite |2b  |9.5   |1 
kite |2b  |1.0   |1 
jun  |1b  |10.0   |1 
arri |1b  |8.5   |1 
arri |2b  |9.5   |1 
arri |3b  |1.0   |1 
imko |1b  |6.5   |1 
miko |2b  |8.0   |1 

与此查询:

SELECT 
    NAME, 
    SUM(CASE 
      WHEN MED_TYPE = '1b' AND MED_STATUS = 'APPROVED' 
       THEN DAYS 
       ELSE 0 
     END) AS USED_1b, 
    SUM(CASE 
      WHEN MED_TYPE = '2b' AND MED_STATUS = 'APPROVED' 
       THEN DAYS 
       ELSE 0 
     END) AS USED_2b 
FROM 
    table1 
GROUP BY 
    NAME 

我得到如下结果:

STUDENT |USED_1b|USED_2b 
----------|-------|------- 
abe  |3.5 |5.0 
arri  |1.5 |0.5 
kiko  |0.0 |0.0 
chen  |4.0 |0.5 
heli  |0.5 |0.0 
miyo  |6.5 |5.5 
mika  |2.0 |1.0 
jun  |3.0 |3.0 
jake  |2.5 |2.5 
zues  |3.5 |2.5 

,但我希望得到如下:

NAME | USED_1b | USED_2b | REMAINING_1b | REMAINING_2b 

remaining_1bremaining_2b从表2列remaining_med现身,他们可以与MED类型分类。连接两张表的是姓名和学生。此外,我想检查学生是否活动。如果不活跃,它将不会显示在结果表中。

这将是什么正确的查询?我不知道如何使用连接或联合。我是SQL Server的新手。

顺便说一句,表1和表2和结果只是整个表的一部分。如果我在这里发布所有内容将会太长。

+1

附加预期的输出也在这里 –

+0

什么是remaining_1b和remaining_2b预期的要求? – FreedomPride

回答

1

你可以分别找到和然后加入。

像这样:

select t1.name, 
    t1.USED_1b, 
    t1.USED_2b, 
    t2.remaining_1b, 
    t2.remaining_2b 
from (
    select name, 
     SUM(case when MED_TYPE = '1b' 
        and MED_STATUS = 'APPROVED' then DAYS else 0 end) as USED_1b, 
     SUM(case when MED_TYPE = '2b' 
        and MED_STATUS = 'APPROVED' then DAYS else 0 end) as USED_2b 
    from table1 
    group by name 
    ) t1 
join (
    select student, 
     SUM(case when MED_TYPE = '1b' then remaining_med else 0 end) as remaining_1b, 
     SUM(case when MED_TYPE = '2b' then remaining_med else 0 end) as remaining_2b 
    from table2 
    group by student 
    ) t2 on t1.name = t2.student; 
+0

哇..感谢男人..似乎是我确切需要的:) btw ..什么是这个查询的linq等价物?因为我会在mvc中使用它 – silver01