解释起来会很复杂,但希望你得到我想要完成的事情。
我有一个转置数据集,如下所示:
STATION | MEDIA | TEMPERATURE |
station 1 | Water | 50
station 1 | acid | 20
这是通过在where子句中使用特殊eventID获得的。每个id最多可以返回10行
我现在有一个通过运行不同的查询获得的EventID列表
我想将此列表传递给第一个查询,并且具有如下所示的结果集:
EventID |STATION | MEDIA | TEMPERATURE |
1 |station 1 | Water | 50 |
1 |station 1 | acid | 20 |
2 |station 1 | Water | 66 |
2 |station 1 | acid | 35 |
我尝试了程序但是当有很多id(可以是50或更多)时这需要很长时间 每个ID都需要单独传递,因为我正在分组在转换表之前进行临时等计算。 是否有一种基于集合的方式来实现这一点,我基本上没有遍历每个ID行?
答案 0 :(得分:0)
这是join
个查询。在这种情况下,您使用join
过滤结果:
select d.*
from dataset1 d join
differentquery q
on d.station = q.station;
在开头获取id
列取决于数据库。一种典型的方法是:
select row_number() over (partition by station order by station) as id, d.*
from dataset1 d join
differentquery q
on d.station = q.station;
答案 1 :(得分:0)
所以不要再使用WHERE id = 1
执行第一个查询,而是想要WHERE id IN (ids from second query)
之类的内容。你可以做到这一点:
select ... -- first query here
where id in
(
select id -- second query here
from ...
);
答案 2 :(得分:0)
我不会依赖你理解你想要的东西,但是如果你想要行号那就是方法
SELECT ROW_NUMBER() OVER (ORDER BY m_product_id) AS Rw,
station as st,
media as med,
tempiratue as tmp
FROM YourTable
如果您想通过SELECT
获取行号SELECT (Select ID from YourTable Where --YourCountraint,
station as st,
media as med,
tempiratue as tmp
FROM YourTable
如果不只是告诉我你想要什么,我会更新我的回复