2014-07-17 79 views
-1

有應用程序中定位的產品照片列表。找到缺失的號碼

然而,它已經發現有一些沒有一套位置。

有沒有辦法檢索所有沒有設置爲1的產品的productID?

快速測試下面的臨時表。你可以看到,PRODID 95不具有1

DECLARE @prodphoto TABLE 
(
ProdID INT, 
StatusID INT, 
Position INT 
) 

INSERT INTO @prodphoto VALUES (95,1,2) 
INSERT INTO @prodphoto VALUES (95,1,3) 
INSERT INTO @prodphoto VALUES (95,1,4) 
INSERT INTO @prodphoto VALUES (95,1,5) 
INSERT INTO @prodphoto VALUES (95,1,6) 
INSERT INTO @prodphoto VALUES (112,1,1) 
INSERT INTO @prodphoto VALUES (112,1,2) 
INSERT INTO @prodphoto VALUES (112,1,3) 
INSERT INTO @prodphoto VALUES (666,1,2) 
INSERT INTO @prodphoto VALUES (666,1,3) 

的位置我期望的輸出會是這樣的

http://s4.postimg.org/57dh9neql/output.png

我在左側加入到一個臨時表了個去的職位,但我沒有得到我想要的。

回答

2

不是很聰明,但簡單的閱讀和理解:

SELECT DISTINCT ProdID 
FROM @prodphoto pp 
WHERE ProdID NOT IN (SELECT ProdID FROM @prodphoto WHERE Position = 1) 

或者,用GROUP BY

SELECT pp.ProdID 
FROM @prodphoto AS pp 
GROUP BY pp.ProdID 
HAVING SUM(CASE WHEN Position = 1 THEN 1 ELSE 0 END) = 0 

等等。許多條條大路通羅馬。 :-)

+0

非常感謝Jeroen。你不想看到我回來的一些想法。 – Jay

1

從您的表中獲取所有行並使用union all添加缺少的行。

select P.ProdID, 
     P.StatusID, 
     P.Position as ProdPosition, 
     P.Position 
from @prodphoto as P 
union all 
select P1.ProdID, 
     null, 
     null, 
     1 
from @prodphoto as P1 
where not exists (
       select * 
       from @prodphoto as P2 
       where P1.ProdID = P2.ProdID and 
         P2.Position = 1 
       ) 
group by P1.ProdID 
order by ProdID, 
     Position