我有一个查询选择第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
希望这有道理吗?
任何想法如何才能获得所需的结果?
答案 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访问它们。
希望这有帮助。
上阅读有关JOINS的更多信息