联接的SQL列错误

时间:2018-07-24 19:46:28

标签: sql-server

我有一个Dtltable

tabid        TickNUM    TickType      Amount

 001-FGF     C2001        Credit      133
 001-FGF     Tk002        Token        23
 001-FGF     Tk003        Token        43

无论如何,我可以使用单个TickNum提取所有Tabid数据,因为所有TickNum的Tabid都是相同的。

Select * from Dtltable
where tickNum = 'C2001' 

,但仅显示特定的TickNum行。我还需要所有具有类似tabid的行。不确定如何编写逻辑。

3 个答案:

答案 0 :(得分:2)

使用JOIN

SELECT d1.* 
FROM Dtltable d1
INNER JOIN Dtltable d2 ON d2.tabid = d1.tabid AND d2.TickNUM = 'C2001'

答案 1 :(得分:1)

一种方法是子查询:

select d.*
from dtltable d
where d.tabid = (select d2.tabid from dtltable d2 where d2.tickNum = 'C2001');

如果子查询可以返回多个行,请使用in而不是=

答案 2 :(得分:0)

虽然这有点长,但是可以通过首先选择不同的数据,然后使用内部联接来实现。下面我是怎么做到的。

CReate table #temptab
(
tabid nvarchar(20) null,
ticknum nvarchar(10)null,
ticktype varchar(20)null
)

Create table #temptab1
(
tabid nvarchar(20)null,
ticknum nvarchar(10)null,
ticktype varchar(20)null
)

insert into #temptab1(tabid,ticknum)
select distinct tabid , ticknum  from #temptab where ticknum='C2001' // you can pass @param instead of hardcoded value.

//在下面的行中,您将在其中获取数据:

select t.tabid,t.ticknum,t.ticktype from #temptab1 t1 inner join #temptab t on t1.tabid= t.tabid