我有一组带有一组数据的临时表
-----------------------------------------------------
| col1 | col2 | col3 | col4 | status|
-----------------------------------------------------
| a | a12 | dd | ff | 1 |
-----------------------------------------------------
| b | b43 | dd | ff | 2 |
-----------------------------------------------------
| c | fe3 | dd | ff | 3 |
-----------------------------------------------------
| d | fd2 | gg | hh | 1 |
-----------------------------------------------------
| e | sf2 | gg | hh | 1 |
-----------------------------------------------------
| f | vd2 | ii | jj | 3 |
-----------------------------------------------------
| g | cd3 | ii | jj | 3 |
-----------------------------------------------------
我需要批量处理表以选择一些行。
即
首先考虑col3 = dd和col4 = ff的行,并只选择一行 row(我有一个算法来选择这一行)然后考虑行 使用col3 = gg和col4 = hh并选择onse然后考虑行 col3 = ii和col4 = jj并选择一行。
如何遍历临时表以选择行和进程的子集。??
我需要根据状态列从每个子集(具有相同col3和col4的子集)中获取一行。
预期结果: -
| col1 | col2 | col3 | col4 | status|
-----------------------------------------------------
| b | b43 | dd | ff | 2 |
-----------------------------------------------------
| d | fd2 | gg | hh | 1 |
-----------------------------------------------------
| f | vd2 | ii | jj | 3 |
-----------------------------------------------------
答案 0 :(得分:0)
这取决于目的和数据库引擎。
答案 1 :(得分:0)
您可以使用窗口函数实现此目的,在您想要一个不同行的任何列集上进行分区:
declare @t table (ID int, TextValue nvarchar(10));
insert into @t values(1,'a'),(2,'a'),(3,'a'),(4,'b'),(5,'b'),(6,'b'),(7,'c'),(8,'c'),(9,'c');
select ID
,TextValue
from(select ID
,TextValue
,row_number() over (partition by TextValue order by ID) as rn
from @t
) a
where rn = 1;