Как получить два поля разных записей в одной записи Mysql - PullRequest
0 голосов
/ 16 октября 2019

У меня есть одна таблица с этим содержимым (Есть больше полей, которые не имеют отношения):

Транзакция может быть покупка или продажа. Покупка может быть id_factura или id_albaran, если это покупка id_factura, id_albaran имеет значение Null, и наоборот, продажа такая же. Но продажа может иметь две записи с одинаковым imei, как мы видим в примере: id_purchasesale 2 и 3 (в этом случае она всегда будет иметь одинаковую цену, в примере 250).

Поле imei можетсуществуют только как покупка один раз (invoice_id или albaran_id) и как продажа один или два раза.

Если есть покупка и нет продажи того же imei, вам не нужно ее показывать.

ТАБЛИЦА покупных продаж

id_purchasesale    transaction    id_factura    id_albaran    Model      imei     price
  1                purchase         1            Null       Samsung      30888     200 
  2                sale             1            Null       Samsung      30888     250
  3                sale             Null         1          Samsung      30888     250  
  4                purchase         Null         1          Apple        52101     300
  5                sale             1            Null       Apple        52101     380  
  6                purchase         2            Null       Motorola     77520     300
  7                sale             2            Null       Motorola     77520     350
  8                purchase         3            Null       Xiaomi       29102     150

Я хочу получить следующий результат: поле с ценой покупки, другое поле с ценой продажи и другое поле с прибылью этих двух полей имодельное поле.

imei        price_purchase    price_sale   profit   Model 
30888            200             250        50      Samsung
52101            300             380        80      Apple
77520            300             350        50      Xiaomi

Ответы [ 3 ]

1 голос
/ 16 октября 2019

вы должны использовать одну и ту же таблицу два, используя псевдоним и фильтрацию при продаже и покупке

select  a.imei
 , a.model
 , a.price as  price_purchase
 , b.price as price_sale
 , b.price - a.price  as profit
from  purchasesale a 
inner join  purchasesale b  on a.imei = b.imei 
    and a.transaction ='purchase'  
      and b.transaction ='sale' 
1 голос
/ 16 октября 2019

Ваш дизайн стола беспорядок. Если вы можете изменить его, я бы разделил эту таблицу на три отдельные таблицы, одну для покупок, одну для продаж и одну для телефонов.

Однако в текущей ситуации это должно сделать то, что вам нужно:

SELECT
 t1.imei as imei,
 t1.price as price_purchase,
 t2.price as price_sale,
 (t2.price - t1.price) as profit,
 t1.model as model
FROM purchasesale t1, purchasesale t2
WHERE t1.imei = t2.imei and
 t1.transaction = 'purchase' and
 t2.transaction = 'sale'

Надеюсь, я помог!

1 голос
/ 16 октября 2019

Вы можете попробовать ниже -

select imeid,
       max(case when transaction='purchase' then price else 0 end) as purchase_price,
       max(case when transaction='sale' then price else 0 end) as sale_price,
       max(case when transaction='sale' then price else 0 end)-max(case when transaction='purchase' then price else 0 end) as profit,
       model
from tablename
where transaction in ('purchase','sale')
group by imeid,model
having count(distinct transaction)=2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...