2012-09-03 82 views
0

假设我有以下条目表:如何根据价值存在查询记录?

ID VALUE CATEGORY 
----------------------- 
1  10 A 
1  20 S 
2  30 S 
2  10 A 
3  50 A 
4  40 C 
5  60 B 

我怎样写一个SQL查询,以便对每个ID如果S类存在,它应该输出的记录,但如果它不存在,它应该输出存在的条目。 所以在我的例子,我想实现以下结果:

ID VALUE CATEGORY 
----------------------- 
1  20 S 
2  30 S 
3  50 A 
4  40 C 
5  60 B 

回答

0

我找到了更好的解决方案:-)

SELECT ID, VALUE, CATEGORY 
    FROM (
     SELECT ID, VALUE, CATEGORY, 
      ROW_NUMBER() OVER (PARTITION BY ID) as SEQ_ID 
     FROM MY_TABLE 
     ORDER BY ID, CATEGORY DESC 
) 
WHERE SEQ_ID = 1 
+0

应该指出的是,这只适用于'category'本地可排序的情况。否则,你将不得不有某种排序映射表。这也不意味着它捕捉到了所描述问题的意图,尽管它可能更接近真正需要的东西。 –

1

尝试,

SELECT ID, VALUE, Category 
FROM tableName 
WHERE Category = 'S' 
UNION 
SELECT ID, VALUE, Category 
FROM tableName 
WHERE ID NOT IN 
       (
        SELECT ID 
        FROM tableName 
        WHERE Category = 'S' 
       ) 
ORDER BY ID 

SQLFiddle Demo

+0

谢谢你,约翰! – user1613270

+0

不客气@ user1613270! –