SQL-запрос для сравнения элементов списка с его общим - PullRequest
0 голосов
/ 16 октября 2019
Product_Code | Product_Name | Amount | Product_Tag
        A    |  Apple       | 20     | smlt 
        B    |  Bat         | 25     | smlt
        C    |  Card        | 30     | smlt
        ST   |  Total       | 75     | smlt
        E    |  EAN         | 25     | lmlt
        F    |  Fran        | 30     | lmlt
        LT   |  Total2      | 55     | lmlt

Рассматривая приведенную выше таблицу в качестве примера, я хотел бы выбрать строку с общим значением (ST | Total | 75 | smlt) в качестве «Всего» в одном столбце и выбрать сумму продукта с тегом продукта «smlt». 'в другом столбце (исключая итоговую строку в таблице)

Теперь я могу подумать о двух отдельных запросах, может ли быть способ объединить два или запрос, который даст результаты, только если естьобщее несоответствие

Мои два отдельных запроса:

select amount from table1
where Product_Code = 'st'

select Product_Tag, sum (convert(bigint,amount)) as Calculated_Total
from table1 
where not Product_Code = 'st'

Ответы [ 2 ]

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

Попробуйте:

SELECT product_tag, calculated_total, amount_total
FROM (
  SELECT t1.product_tag, SUM(t1.Amount) AS Calculated_total, MAX(t2.Amount) amount_total
  FROM table1 t1
  INNER JOIN table1 t2 ON (
    (t1.product_tag = 'smlt' AND t2.product_code = 'ST') OR
    (t1.product_tag = 'lmlt' AND t2.product_code = 'LT')
  )  
  WHERE t1.product_code IN ('ST','LT')
  GROUP BY t1.product_tag
) src
--  WHERE Calculated_Total <> Amount_Total

Просто раскомментируйте WHERE, если хотите только вернуть несоответствия.

SQL Fiddle

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

Это то, что вы хотите?

select sum(case when product_tag = 'st' then amount end) as st_amount,
       sum(case when product_name = 'total' then amount end) as total_amount
from table1
where product_tag = 'st' or product_name = 'total';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...