首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何执行此mysql困难查询?

如何执行此mysql困难查询?
EN

Stack Overflow用户
提问于 2022-10-06 13:56:15
回答 3查看 42关注 0票数 -1

我想尝试执行以下查询:

我有几张桌子:

项目表

代码语言:javascript
复制
RUT          | Item_Id |  Period  |  Amount
15897554-4   |    8    | 2022-10  |  50000
18897554-9   |    3    | 2022-10  |  80000

雇员表

代码语言:javascript
复制
RUT          |    Name
15897554-4   |    Luis    
18897554-9   |    Ramon    

我想这么做:

代码语言:javascript
复制
RUT          Name  Item_3_amount  Item_8_amount   Period
15897554-4   Luis      80000         50000       2022-10
18897554-9   Ramon       0              0        2022-10

我试过这样做:

代码语言:javascript
复制
SELECT employees.rut, employees.name, () as Item_3_amount, () as Item_8_amount FROM employees 

但是我不知道怎么取这笔钱,你能帮我吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-10-06 14:18:15

在每个特定项目的每个员工的基础上,您似乎想要总计。在本例中,示例数据只显示每个人一行和一个项。如果你对一个人有多个约会会发生什么。你想要他们的合计总数吗?在每天的基础上?还是显示一个从/到时间范围的周期?有太多的选择了,但是我会试着展示我认为你想要的东西。

另外,在将来,请将您的SQL格式设置为可读性与单行长度。在评论中不要像提问一样把答案放进去。编辑你的原始帖子,只需添加到它的正文。

现在,回到选项上。先加入

代码语言:javascript
复制
select
      e.rut,
      e.name,
      case when i.item_id = 3 
           then amount else 0 end item_3_amount,
      case when i.item_id = 8
           then amount else 0 end item_8_amount,
      i.period
   from
      Employees e
         JOIN Items i
            on e.rut = i.rut
   order by
      e.rut

现在,如果您想要进行一些聚合,或者对特定期间进行筛选,则只需对金额使用SUM(),并为期间应用WHERE子句,如

代码语言:javascript
复制
select
      e.rut,
      e.name,
      sum( case when i.item_id = 3 
           then amount else 0 end ) item_3_amount,
      sum( case when i.item_id = 8
           then amount else 0 end ) item_8_amount,
      i.period
   from
      Employees e
         JOIN Items i
            on e.rut = i.rut
           AND i.period = '2022-10'
   group by
      e.rut,
      e.name,
      e.period
   order by
      e.rut
票数 0
EN

Stack Overflow用户

发布于 2022-10-06 14:03:30

尝试一下,您需要链接这两个表。

代码语言:javascript
复制
SELECT employees.rut, employees.name, () as Item_3_amount, () as Item_8_amount, Items.period  FROM employees, Items where employees.rut = Items.rut
票数 0
EN

Stack Overflow用户

发布于 2022-10-06 14:13:54

使用case语句来转轴项目金额。

从你的例子看,你似乎有错误的最终结果,我假设你打算在第二次记录上得到80000?

代码语言:javascript
复制
SELECT 
    employees.rut, 
    employees.name, 
    CASE WHEN items.Item_id = 3 THEN items.Amount ELSE 0 END as Item_3_amount,        
    CASE WHEN items.Item_id = 8 THEN items.Amount ELSE 0 END as Item_8_amount,
    items.Period 
FROM 
    employees
INNER JOIN
    items
    ON items.RUT = employees.RUT
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73975090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档