t如何在SQL中从多列中选择数据子集

  • 本文关键字:选择 数据 子集 SQL sql tsql
  • 更新时间 :
  • 英文 :


假设我有一个如下表,我想选择购买了一件以上商品的客户。

第3项>第4项空
客户 第1项 第2项
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为单行。然后,您可以通过在其上应用基本组来检查计数是否大于所需数量。

最新更新