Sql 基于2列从联合结果中筛选重复项

Sql 基于2列从联合结果中筛选重复项,sql,sql-server,sql-server-2008,azure-sql-database,Sql,Sql Server,Sql Server 2008,Azure Sql Database,我得到了两个select查询的并集,其中一个被查询的表是一个临时表,以确保输出记录,因此临时表具有每个日期的预期输出,但Sale列的默认值为0 示例输出结果如下所示: ProductID | Product Desc | TransactionDate | Sale 1011021 | SD DOG | 2017-01-07 | 0 1011021 | SD DOG | 2017-01-07 | $17 1011021 | SD D

我得到了两个select查询的并集,其中一个被查询的表是一个临时表,以确保输出记录,因此临时表具有每个日期的预期输出,但Sale列的默认值为0

示例输出结果如下所示:

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
Union基于行删除重复项,如何使其基于productID和transactionDate列删除重复项,在Sale为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'
Group by transactionProducts.productID, transactionDate
UNION select * from "temptable" group by productID, productDesc, Sale, transactionDate 
ORDER BY transactionDate
这个怎么样:

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
注意,我在第一个SELECTWHERE子句中添加了AND和sumsalePrice>0

HTH

使用“不存在”从临时表中选择结果集中不存在的行:

. . .
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
如果两个销售值都为零,或者都非零,会发生什么情况?