SQL查询问题(Oracle)

时间:2011-09-21 09:23:38

标签: sql oracle

我有一个查询选择第1周或第2周或两者(如果可用),然后我需要找到一种只显示第1周结果的方法,但知道哪些可用于两周。

这是我的查询,可能有助于解释

select *
from table1 t1
where t1.location = 'VH' 
and (t1.week = '46' or t1.week = '47');

这给了我以下结果

week    location
46      VH209A
46      VH209B
46      VH20B
46      VH20C
47      VH209B
47      VH20A
47      VH20C

我只想显示这些结果

week    location
46      VH209A
46      VH209B
46      VH20B
46      VH20C

但我想知道下周哪些记录也可用,即这些记录

week     location
47       VH209B
47       VH20C

所以我想要的结果就像是

week     location    2weeks
46       VH209A        N
46       VH209B        Y
46       VH20B         N
46       VH20C         Y

希望这有道理吗?

任何想法如何才能获得所需的结果?

2 个答案:

答案 0 :(得分:2)

SELECT
  t1.week
  , t1.location
  , CASE WHEN t2.location is not null THEN 'Y'
         ELSE 'N'
    END AS hasmore
FROM table1 t1
LEFT JOIN (SELECT DISTINCT location FROM table1 WHERE week = '47') t2
  ON (t1.location = t2.location)
WHERE t1.location = 'VH' 
  AND t1.week = '46';

答案 1 :(得分:0)

您是否考虑过使用INNER JOIN,例如左或右加入?使用此功能,您可以使用相同的数据访问连接到表的其他表中的数据。

我对你的数据库结构一无所知,但我会将几个数据分成几个表。有了这个,我会在其中运行Joins查询。

例如

select * from table1 LEFT JOIN table2.withdatajoinedtotable1 ON table2.week = table1.week WHERE table2.2weeks = 'Y'

如果您将数据分成几个表,则可以使用JOINS访问它们。

希望这有帮助。

SQL JOINS

上阅读有关JOINS的更多信息