2014-10-20 4 views
0

('DC01', '5000')이 아닌 '1003', '1039', '1012'에있는 SKU를 선택하려고합니다.) 여기서 SUM은 3보다 큽니다. SKU '000000001041106003'이 StockOnHand가 3보다 큰 '1003'이고 StoreID가 'DC01'이므로 0 레코드를 되 찾으려하지만 SKU 값이 '000000001041106003 '가 반환됩니다. 해당 SKU의 StoreID는 'DC01'및 '1003'입니다.SQL SELECT * WHERE 값이 목록에없고 다른 목록에 있음

원하는 결과를 얻으려면 무엇을해야합니까?

productName     SKU StoreId StockOnHand webenabled 

.Speedo Yarn 000000001041106001 1003  1   1 
.Speedo Yarn 000000001041106002 1003  3   1 
.Speedo Yarn 000000001041106003 1003  4   1 
.Speedo Yarn 000000001041106003 DC01  0   1 


SELECT DISTINCT(SKU) 
FROM etlStoreAssortment 
WHERE StoreId NOT IN ('DC01','5000') 
AND StoreId IN ('1003','1039','1012') GROUP BY SKU HAVING SUM(StockOnHand) > 3 
+0

메신저 확실하지 "... NOT을 StoreID IN (...." – user2504380

+1

데이터 및 쿼리에 따르면 출력이 정확하며 각 레코드는 조건과 별도로 유효성이 검사됩니다. –

답변

1

어디 하나의 레코드를 봅니다. 은 Store ID가 IN ('DC01', '5000') 및 StoreId IN ('1003', '1039', '1012') 인 '000000001041106003'에 대해 레코드입니다. 당신이 찾고있는 것은 그룹당 적어도 하나의 레코드가 특정 가치를 가지고 있거나 가지지 않는 곳입니다. 사용이에 대한 HAVING : 그래서 ... " NOT IN을 ..."당신이 사용하고 있지만, 어쨌든 내가 작성합니다 방언하는

SELECT DISTINCT(SKU) 
FROM etlStoreAssortment 
GROUP BY SKU 
HAVING SUM(StockOnHand) > 3 
AND MAX(CASE WHEN StoreId IN ('DC01','5000') THEN 1 ELSE 0 END) = 0 
AND MAX(CASE WHEN StoreId IN ('1003','1039','1012') THEN 1 ELSE 0 END) = 1; 
+0

감사합니다. –