SQL选择组和过滤器

时间:2016-06-02 13:15:12

标签: sql

以下数据位于数据库表

Color   MADE    MODEL   REG
-----   ----    -----   ----
Red     TOYOTA  CAR     EN-9082   *
Yellow  TOYOTA  CAR     YR-4356   *
Red     TOYOTA  JEP     AX-4566
Yellow  TOYOTA  SUV     AX-4343
Yellow  NISSAN  CAR     ER-0873
Yellow  HONDA   SUV     AS-6453   *    ^
Red     HONDA   SUV     SD-9853   *    ^
Blue    HONDA   SUV     AS-9762        ^

我必须编写一个代码来提取由' *'表示的记录。 (当没有聚合时,只有过滤它们)颜色'红色'和'黄色'传入。

同样,如果我传递颜色'红色'黄色'和'蓝'我需要' ^'

指示的记录

换句话说,我需要记录,其中所有传递的颜色都可用于Made和Model组合。

另一方面,我不能在SQL中使用颜色名称。它们被传递到我的程序中,我无法控制它们。

是否可以编写理想情况下使用纯SQL的SQL。我需要针对多个数据库(例如Oracle,SQL Service,Informix)执行它

Ish

2 个答案:

答案 0 :(得分:2)

你可以试试这个。 having可以扩展为其他颜色组合。

select *
from tablename 
where made in (select made
               from tablename
               group by made
               having count(case when color in ('Red','Yellow') then 1 end) >= 2)

答案 1 :(得分:0)

vkp的答案基本上是正确的。我认为它更简单地写成:

select t.*
from tablename  t.
where made in (select t2.made
               from tablename t2
               where t2.color in ('Red', 'Yellow')
               group by t2.made
               having count(*) = 2
              );

如果允许重复,则having子句应为count(distinct color) = 2