2017-01-22 6 views
0

Я получаю UNION из двух запросов выбора, одна из запрашиваемых таблиц - это временная таблица, обеспечивающая вывод записей (так что таблица temp имеет ожидаемый результат для каждой даты но со значением по умолчанию 0 для столбца продажи выходной результатФильтрация дубликатов из результатов UNION на основе 2 столбцов

примера может быть что-то вроде этого:

ProductID | Product Desc | TransactionDate | Sale 
1011021 | SD DOG  | 2017-01-07  | 0 
1011021 | SD DOG  | 2017-01-07  | $17 
1011021 | SD DOG  | 2017-01-14  | 0 
1011021 | SD DOG  | 2017-01-14  | $15 
1011021 | SD DOG  | 2017-01-21  | $21 
1011021 | SD DOG  | 2017-01-28  | 0 
1011021 | SD DOG  | 2017-01-28  | $21 

Союз удаляет дубликаты на основе строк, как я могу сделать это удалить дубликаты на основе PRODUCTID и transactionDate, удаляя дубликаты, где Sale 0?

--query ниже

SELECT transactionProducts.productID, products.productDesc, sum(salePrice) as Sale, transactionDate 
FROM products LEFT JOIN transactionProducts on products.productID = transactionProducts.productID 
LEFT JOIN transactions ON transactionProducts.transactionID = transactions.transactionID 
LEFT JOIN productCategory on productCategory.productID = products.productID 
LEFT JOIN categories on categories.categoryID = productCategory.categoryID 
WHERE (transactionProducts.productID='123' AND transactions.transactionDate='2017-01-12' 
Group by transactionProducts.productID, transactionDate 
UNION select * from "temptable" group by productID, productDesc, Sale, transactionDate 
ORDER BY transactionDate 
+0

Что произойдет, если оба значения 'Sale' равны нулю, или если оба не являются -нуль? –

ответ

1

Используйте not exists для выбора строк из временной таблицы, которые уже не в наборе результатов:

. . . 
UNION ALL 
SELECT tt.* 
FROM temptable tt 
WHERE NOT EXISTS (SELECT 1 
        FROM transactionproducts tp JOIN 
         transaction t 
         ON t.transactionID = tp.transactionID 
        WHERE tp.productId = tt.productId AND 
         t.transactionDate = tt.transactionDate 
       ) 
GROUP BY productID, productDesc, Sale, transactionDate 
ORDER BY transactionDate 
+0

Спасибо, что поставили меня в правильном направлении! – MJJLAM

0

Как об этом:

SELECT transactionProducts.productID, products.productDesc, sum(salePrice) as Sale, transactionDate 
FROM products LEFT JOIN transactionProducts on products.productID = transactionProducts.productID 
LEFT JOIN transactions ON transactionProducts.transactionID = transactions.transactionID 
LEFT JOIN productCategory on productCategory.productID = products.productID 
LEFT JOIN categories on categories.categoryID = productCategory.categoryID 
WHERE (transactionProducts.productID='123' AND transactions.transactionDate='2017-01-12' 
      AND sum(salePrice) > 0) 
Group by transactionProducts.productID, transactionDate 
UNION select * from "temptable" group by productID, productDesc, Sale, transactionDate 
ORDER BY transactionDate 

Обратите внимание, я добавил "И сумма (SalePrice)> 0" в первом ВЫБРАТЬ ИНЕКЕ.

НТН

 Смежные вопросы

  • Нет связанных вопросов^_^