如果人有产品A而不是A和B,则选择T-SQL

时间:2016-10-15 18:44:22

标签: sql-server tsql

我不确定如何实现这一目标。我希望得到拥有“ProductA”的人,而不是拥有“ProductA”和“ProductB”的人。

预期产出:

requests

表:

patch

4 个答案:

答案 0 :(得分:2)

我会在每个客户处使用条件汇总,并检查客户是否至少购买了A一次而不是B

SELECT CustomerID
FROM #TempTable
GROUP BY CustomerID
HAVING SUM(CASE WHEN Product = 'ProductA' THEN 1 ELSE 0 END) > 0 AND
       SUM(CASE WHEN Product = 'ProductB' THEN 1 ELSE 0 END) = 0

答案 1 :(得分:0)

CustomerID分组,您可以检查可用的最小和最大Product是否相同,这应该是您正在寻找的那个,实际上,'ProductA':

SELECT 
  CustomerID,
  min(Product)
FROM TempTable
GROUP BY CustomerID
HAVING 1=1
  AND min(Product) = 'ProductA'
  AND max(Product) = 'ProductA'
;

答案 2 :(得分:0)

SELECT C1.CustomerID
FROM #TempTable C1 
LEFT JOIN #TempTable C2  
ON C2.ID = C1.ID 
AND C2.Product = 'ProductB'
where C2.ID is null
AND C1.Product = 'ProductA'

答案 3 :(得分:0)

使用PIVOT:

WITH CTE
AS
(
    Select CustomerID, [ProductA], [ProductB] from #TempTable
    PIVOT
    (
    MAX(Product) FOR Product IN ([ProductA], [ProductB])
    ) p
    WHERE [ProductB] IS NULL
)
Select CustomerID, [ProductA] as Product
from CTE