找到丢失的号码

时间:2014-07-17 08:48:20

标签: sql tsql join left-join

列出应用中的产品照片列表。

然而,已经发现有些人没有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 个答案:

答案 0 :(得分: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

等。许多道路通往罗马。 : - )

答案 1 :(得分: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