查询根据值获取组

时间:2014-08-01 19:50:44

标签: sql sql-server querying

我有下表(TableOne):

GroupId         TradeId     Status
16848           78          LIVE
16848           79          LIVE
16848           80          LIVE
16848           81          DELETED
16841           82          DELETED
16841           83          LIVE

在给定已删除的交易ID时,我需要获得整个组的价值吗? 有一个简单的方法吗?我试着做一些查询,但最后我不知道从哪里开始。

感谢回复人员,也许我简化了我的问题。这里有更多细节

交易ID来自另一个映射表(TableCorrect):

OriginalTradeId     NewTradeId  
100                 81
101                 90
102                 91

我获得了原始的TradeId,需要使用“TableOne”加入“TableCorrect”

Select * 
from TableOne 
inner join TableCorrect on TableOne.TradeId=TableCorrect.NewTradeID
where TableCorrect.OriginalTradeId={@PassedInValue} 

但上面只给了我删除的条目,但我希望表1中的其余交易具有相同的GroupId

所以给出OriginalTradeId = 100

我想要以下输出:

   GroupId         TradeId      Status
    16848           78          LIVE
    16848           79          LIVE
    16848           80          LIVE
    16848           81          DELETED

谢谢和问候,

千电子伏

2 个答案:

答案 0 :(得分:1)

我认为带有子查询的where子句可能是最简单的解决方案:

Select t1.*
from TableOne t1
where t1.GroupId = (select top 1 GroupId
                    from TableOne tt1 join
                         TableCorrect tc
                         on tt1.TradeId = tc.NewTraceId
                    where tc.OriginalTradeId = @PassedInValue
                   );

这不是唯一的方法。另一个有趣的方法是使用窗口函数:

select t1.*
from (select t1.*,
             max(case when tc.OriginalTradeId = @PassedInValue then 1 else 0 end) over
                 (partition by t1.GroupId) as HasOriginalTrade
      from TableOne t1 join
           TableCorrect tc
           on t1..TradeId = tc.NewTradeId
     ) t1
where HasOriginalTrade > 0;

答案 1 :(得分:0)

DECLARE @myTradeId INT;
SET @myTradeId = 1;

SELECT *
    FROM TableOne
    WHERE GroupId = (SELECT GroupId
                        FROM TableOne
                            WHERE TradeId = @myTradeId)