假設我有一張如下表,我想選擇購買超過 1 件商品的客戶。
| 顧客 | 專案1 | 專案2 | 第 3 項 | 第 4 項 |
|---|---|---|---|---|
| 1 | 10 | 空值 | 空值 | 空值 |
| 2 | 5 | 11 | 空值 | 空值 |
| 3 | 7 | 空值 | 9 | 空值 |
| 4 | 空值 | 空值 | 2 | 空值 |
| 5 | 7 | 13 | 9 | 空值 |
我的最終輸出應該是
| 顧客 | 專案1 | 專案2 | 第 3 項 | 第 4 項 |
|---|---|---|---|---|
| 2 | 5 | 11 | 空值 | 空值 |
| 3 | 7 | 空值 | 9 | 空值 |
| 5 | 7 | 13 | 9 | 空值 |
我的代碼是
SELECT
customer
,item1
,item2
,item3
item4
FROM StoreData
WHERE item1 IS NOT NULL OR
item2 IS NOT NULL OR
item3 IS NOT NULL OR
item4 IS NOT NULL
但這似乎是不正確的?有什么建議?非常感謝
uj5u.com熱心網友回復:
嘗試這樣的事情:
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
uj5u.com熱心網友回復:
你可以試試:
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;
演示
uj5u.com熱心網友回復:
這個問題的另一種方法是使用“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 命令可幫助您將 item1、item2、...、itemN 視為單行。然后您可以在其上應用基本組來檢查計數是否大于所需數量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431101.html
