4

如何仅选择同一名称的标志值不同的名称?

name    flag
ben     0
harry   1
harry   1
harry   1
john    1
john    0
john    1
krishna 1
krishna 1
luke    0
steve   1
steve   0

结果应该选择 john 和 steve

4

2 回答 2

7

您可以使用以下内容对数据进行分组name并计算不同的标志值。如果count大于 1,则它们具有不同的标志:

select name
from yourtable
group by name
having count(distinct flag) > 1

请参阅带有演示的 SQL Fiddle

如果您想对此进行扩展并在表中包含其他列,则可以使用:

select t1.name, t1.flag
from yourtable t1
where exists (select name
              from yourtable t2
              where t1.name = t2.name
              group by name
              having count(distinct flag) > 1)

请参阅带有演示的 SQL Fiddle

这将返回名称和标志:

|  NAME | FLAG |
----------------
|  john |    1 |
|  john |    0 |
|  john |    1 |
| steve |    1 |
| steve |    0 |
于 2013-02-12T10:32:38.453 回答
4

尝试以下操作:

SELECT DISTINCT t1.Name
FROM Table t1 
INNER JOIN Table t2 ON t1.Name = t2.Name
WHERE t1.flag <> t2.flag
于 2013-02-12T10:33:02.780 回答