skip to Main Content

I want to try to do this query:

I have these tables:

Items Table

RUT          | Item_Id |  Period  |  Amount
15897554-4   |    8    | 2022-10  |  50000
18897554-9   |    3    | 2022-10  |  80000

Employees Table

RUT          |    Name
15897554-4   |    Luis    
18897554-9   |    Ramon    

And I want to do this:

RUT          Name  Item_3_amount  Item_8_amount   Period
15897554-4   Luis      80000         50000       2022-10
18897554-9   Ramon       0              0        2022-10

I have tried this:

SELECT employees.rut, employees.name, () as Item_3_amount, () as Item_8_amount FROM employees 

But I do not know how to take the amounts, can you help me? Thanks

3

Answers


  1. try this, you need to link the two tables.

    SELECT employees.rut, employees.name, () as Item_3_amount, () as Item_8_amount, Items.period  FROM employees, Items where employees.rut = Items.rut
    
    Login or Signup to reply.
  2. Use a case statement to pivot the item amounts.

    From your example it looks like you have the wrong end result, I’m assuming you meant to have the 80000 on the second record?

    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
    
    Login or Signup to reply.
  3. It appears you want totals on a per-employee basis for each particular item. In this case sample data, you are only showing a single row per person and a single item. What happens if you have multiple dates for a given person. Do you want the aggregated total for them? On a per-day basis? or showing a from/to time range period? Too many options, but I’ll try to show what I THINK you are trying to go for.

    Also, in the future, please format your SQL for readability vs one long single row. And dont put answers like a query in a comment. EDIT your original post and just add to the body of it.

    Now, back to options. Get your joins first

    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
    

    Now, if you wanted to do some aggregations, or filtering on specific periods, you could just adjust to use SUM() for the amounts and apply a WHERE clause for the periods such as

    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
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search