如何查询基于另一个值的不同值

时间:2015-04-06 04:02:53

标签: sql database sql-server-2008

我想知道如何根据查询返回具有另一个“ value ”的值,嗯我不知道它应该被称为什么, identifier < / em>的?例如,我有以下数据:

id    | date       | user | item  |      material      | Text | Description |
------+------------+------+-------+--------------------+------+-------------+
12345 | 31.03.2015 | ID00 | 00010 | 000000001011000106 | abcd |  something  | 
12345 | 31.03.2015 | ID00 | 00020 | 000000001011010105 | abcd |  test       |
12345 | 31.03.2015 | ID00 | 00030 | 000000001011020106 | abcd |  something  |
12345 | 31.03.2015 | ID00 | 00040 | 000000001011020104 | abcd |  something  |
44455 | 31.03.2015 | ID00 | 00010 | 000000001011040106 | abcd |  something  |
44455 | 31.03.2015 | ID00 | 00020 | 000000001011000105 | abcd |  something  |
44455 | 31.03.2015 | ID00 | 00030 | 000000001011010104 | abcd |  something  |
67890 | 31.03.2015 | ID00 | 00010 | 000000001011100402 | abcd |  something  |
77777 | 31.03.2015 | ID00 | 00010 | 000000001011100402 | bcad |  something  |
80808 | 31.03.2015 | ID00 | 00010 | 000000001011140102 | abcd |  something  |
90009 | 31.03.2015 | ID00 | 00010 | 000000001011100102 | dcba |  something  |
66666 | 01.04.2015 | ID00 | 00010 | 000000001011160101 | cdab |  somesome   |

而且,我希望仅根据 id description 获得结果。 假设所有id '44455'都有描述的值,即'something'不应显示。但对于id '12345',除了1行包含不同的值,'test'

因此,应显示的行是包含值 null description ,以及包含基于标识符< description 的不同值的行 ID 即可。从上面的例子中,它应该打印出来:

id    | date       | user | item  |      material      | Text | Description |
------+------------+------+-------+--------------------+------+-------------+
12345 | 31.03.2015 | ID00 | 00010 | 000000001011000106 | abcd |  something  | 
12345 | 31.03.2015 | ID00 | 00020 | 000000001011010105 | abcd |  test       |
12345 | 31.03.2015 | ID00 | 00030 | 000000001011020106 | abcd |  something  |
12345 | 31.03.2015 | ID00 | 00040 | 000000001011020104 | abcd |  something  |

如何在此案例中查询条件?有什么建议吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

您可以使用EXISTS进行查询。

假设您的表名是tbl,则查询为:

select *
from tbl a
where exists (select 1 from tbl b where a.id = b.id and b.description <> 'Something');

答案 1 :(得分:0)

你可以尝试这个查询

select *
from tbl a
where 1 < (select count(*) from tbl b where a.id = b.id group by b.description);