如何在条件跨越两行的情况下获取列值?

时间:2014-08-28 08:53:48

标签: sql

我有一张包含当前值的表格:

Result of two queries

我想要的是获取projekt值,其中kod为GregerÅutte

截至目前,我的尝试什么都没有。由于条件跨越两行,我不知道如何获得我需要的projekt

想要的结果如下:

enter image description here

我在这里要求魔法可能有点粗鲁,但我目前没有魔法点。

如何在条件跨越两行的情况下获取列值?

8 个答案:

答案 0 :(得分:1)

类似的东西怎么样?

select 
distinct projekt 
from myTable 
where kod in ('Greger','Åutte')
group by projekt
having count(projekt) > 1

答案 1 :(得分:1)

使用此:

SELECT a.projekt
FROM myTable a
WHERE EXISTS (
  SELECT b.projekt
  FROM myTable b
  WHERE b.projekt=a.projekt AND kod='Greger'
) AND EXISTS (
  SELECT c.projekt
  FROM myTable c
  WHERE c.projekt=a.projekt AND kod='Åutte'
)

另一种方法是计算匹配记录,但您必须确保计算DISTINCT值的值:

SELECT projekt
FROM myTable
WHERE kod IN ('Greger','Åutte')
GROUP BY projekt
HAVING COUNT(DISTINCT kod)=2

如果您知道(projekt,kod)是myTable的UNIQUE或PRIMARY键,这可以简化:

SELECT projekt
FROM myTable
WHERE kod IN ('Greger','Åutte')
GROUP BY projekt
HAVING COUNT(*)=2

在所有情况下,如果此表很大,最好确保您有(projekt,kod)索引;)

答案 2 :(得分:0)

将语句更改为

Select * from myTable where kod = 'Greger' OR kod = 'Åutte'

或在

Select * from myTable where kod in ('Greger', 'Åutte')

答案 3 :(得分:0)

使用OR而不是AND

SELECT * FROM myTable WHERE kod = 'Greger' OR kod='Autte'

你的实际陈述要求一行,其中kod是Greger并且每行都是autte,这是不可能的,因为只有一个kod列。

如果您考虑为一列提供更多棕褐色条件。其他答案中建议的IN子句可能是一个很好的解决方案,因为它减少了语句的大量冗长。

答案 4 :(得分:0)

使用in

select projekt from myTable where kod in ('Greger','Åutte');

http://www.w3schools.com/sql/sql_in.asp

答案 5 :(得分:0)

看起来您正在使用SQL Server,因此您可以使用intersect关键字,如下所示:

select * from tbl where projekt in
(select projekt from tbl where kod = 'Greger'
 intersect
 select projekt from tbl where kod = 'Åutte')

Intersect将返回所有具有两个条目行的项目。然后,您可以根据子查询的结果选择表中的所有列。

Demo

答案 6 :(得分:0)

有多种可能性

SELECT DISTINCT projekt FROM users
WHERE kod IN('Greger','Åutte')

OR

SELECT DISTINCT projekt FROM users 
WHERE kod = 'Greger' OR kod = 'Åutte'

答案 7 :(得分:-1)

使用OR,如果这两个条件中的一个可用,则允许选择:

SELECT * FROM myTable WHEREkod = 'GREGER' OR kod='AUTTE'