【问题标题】:SQL Server query joining two tablesSQL Server 查询连接两个表
【发布时间】:2017-07-05 00:12:06
【问题描述】:

我这里有两张桌子

表 1

NAME      |MED_TYPE |MED_STATUS  |DAYS
----------|---------|------------|--------
miyo      |1b       |APPROVED    |0.5
miya      |1b       |APPROVED    |1.0
jun       |3b       |APPROVED    |1.0
kite      |3b       |APPROVED    |1.0
hans      |1b       |APPROVED    |1.0
mark      |1b       |APPROVED    |2.0
jep       |1b       |APPROVED    |1.0
Gali      |2b       |APPROVED    |0.5
Hera      |1b       |APPROVED    |0.5
Zues      |2b       |APPROVED    |0.5

表 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 以及结果只是整个表的一部分。全部都发到这里就太长了。

【问题讨论】:

  • 在这里也添加预期的输出
  • 剩余_1b 和剩余_2b 的预期要求是什么?

标签: sql sql-server join union


【解决方案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;

【讨论】:

  • 哇 ..thanks man .. 似乎正是我所需要的 :) btw .. 这个查询的 linq 等价物是什么?因为我要在 mvc 中使用它
猜你喜欢
  • 2016-05-27
  • 1970-01-01
  • 2014-08-30
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2013-12-10
相关资源
最近更新 更多