如何通过比较其他字段mssql来检索字段记录?

时间:2013-01-25 06:46:48

标签: sql-server-2008

我有一张桌子;让它叫做table1;包含以下字段和数据

msgid  msisdn teaserid send
1      333     1        1
2      333     1        0
3      444     2        1
4      444     2        1
5      444     3        1

我需要一个返回msgid的查询,对于每个具有相同msisdn,teaserid的记录,send = 1。在上面的例子中,我想要msgid:3,4,5作为结果。 如何使用mssql查询来完成?

2 个答案:

答案 0 :(得分:2)

这是对window functions

的可爱用法
declare @t table (msgid int,msisdn int,teaserid int,send int)
insert into @t (msgid,msisdn,teaserid,send) values
(1,333,1,1),
(2,333,1,0),
(3,444,2,1),
(4,444,2,1),
(5,444,3,1)

select * from (
select *,MIN(send) OVER (PARTITION BY msisdn,teaserid) as all1
from @t
)t
where all1 = 1

结果:

msgid       msisdn      teaserid    send        all1
----------- ----------- ----------- ----------- -----------
3           444         2           1           1
4           444         2           1           1
5           444         3           1           1

通过计算MIN(send)分区上的msisdn,teaserid,如果所有send值都为1,则此值只能为1.如果只有一行有0,那么这将是该分区的最小值。

答案 1 :(得分:1)

您可以使用此查询来获取结果

 select msgid 
 from table1 t 
 where send=1 
       and exists(select * from table
                  where send=1 
                  and msisdn=t.msisdn
                  and teaserid=t.teaserid and msgid != t.msgid)