获取其他3个值(不同列)找到该特定值的值

时间:2015-07-20 16:06:49

标签: sql teradata

我要做的是找到一个日期和trans_id,其中item_nbr = 1,2和3(没有特定的顺序)。必须使用相同的trans_id找到所有3个项目。

所以表格如下:

trans_id, trans_date, item_nbr, item, price

表格如下:

trans_id--trans_date--item_nbr--item--price    
1234--1/1/2015--1--item1--1.00   
1234--1/1/2015--3--item3--3.00    
1234--1/1/2015--2--item2--2.00    
4321--1/1/2015--2--item2--2.00

结果应该是:

1/1/2015--1234

但查询应仅返回日期和trans_id。

所以这就是我到目前为止所做的,但我知道它不正确,因为它会拉回所有包含第1,2和/或3项的日期/ trans_id,而不是1,2,3 date和trans_id。

select date, trans_id
from table1
where item in ('item1', 'item2', 'item3')

非常感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

你很亲密。只需使用sequel -C sqlite://db/production.sqlite3 postgres://user@localhost/dbselect date, trans_id from table1 where item in ('item1', 'item2', 'item3') group by date, trans_id

group by

编辑:

如果having未返回任何结果,则您不会在同一日期同时处理所有三个项目。

您可以考虑从select date, trans_id from table1 where item in ('item1', 'item2', 'item3') group by date, trans_id having count(distinct item) = 3; having count(distinct item) = 3中移除date。那里似乎很尴尬。我只留下它,因为它在你问题的查询中。

答案 1 :(得分:0)

你需要的是这样的东西:

awakeFromNib

让我知道这是否有效!

编辑:错误的列错了!

答案 2 :(得分:0)

select date, trans_id
from table1
where item in ('item1', 'item2', 'item3')
group by 1,2
having count(*) = 3

如果item不唯一,则必须使用

having count(distinct item) = 3

答案 3 :(得分:0)

您可以计算不同的值

;WITH cte (trans_id) AS (
     SELECT trans_id
     FROM table1 
     Group By trans_id 
     Having Count(distinct item_nbr) = (Select Count(Distinct item_nbr) from table1))

Select DISTINCT trans_id, trans_date 
From table1 
Where trans_id IN (
Select trans_id from  cte)

OR

Select DISTINCT trans_id, trans_date 
    From table1 
    Where trans_id IN (
    SELECT trans_id
         FROM table1 
         Group By trans_id 
         Having Count(distinct item_nbr) = (Select Count(Distinct item_nbr) from table1))

答案 4 :(得分:0)

所以,我找到了解决方案。不确定它是否效率最高,但我决定为每个项目创建一个易失性表,然后根据日期,trans_id以及我的示例中未提及的其他几个字段查询3个易失性表。

谢谢大家的帮助!