假设我有一个如下表,我想选择购买了一件以上商品的客户。
客户 | 第1项 | 第2项 | 第3项>第4项||
---|---|---|---|---|
1 | 10 | NULL | NULL | |
2 | 5 | 11 | 空 | 空|
3 | 7 | 空 | 9 | NULL |
NULL | NULL | 2 | NULL | |
5 | 7 | 13 | 9 | 空 |
试试这样的东西:
WHERE
(
(CASE WHEN item1 IS NOT NULL THEN 1 ELSE 0 END)
+(CASE WHEN item2 IS NOT NULL THEN 1 ELSE 0 END)
+(CASE WHEN item3 IS NOT NULL THEN 1 ELSE 0 END)
+(CASE WHEN item4 IS NOT NULL THEN 1 ELSE 0 END)
) > 1
您可以尝试:
SELECT s.*
from StoreData s
inner join (
select customer,concat_ws('-',item1,item2,item3,item4) as orders
from StoreData
) as t1 on t1.customer=s.customer
where CHARINDEX('-',orders ) >= 1;
演示
这个问题的另一种方法是使用"UNPIVOT";表达式:
SELECT customer, COUNT(*) --, Item, Quantity
FROM dbo.StoreData
UNPIVOT (
Quantity FOR Item IN (item1, item2, item3, item4)
) AS UnpivotTable
GROUP BY
customer
HAVING
COUNT(*) > 1
UNPIVOT命令可帮助您查看项目1、项目2。。。,itemN为单行。然后,您可以通过在其上应用基本组来检查计数是否大于所需数量。