thu*_*eek 5 t-sql sql-server sql-server-2008
我有一组数据,需要为每个CON/OWNER/METHOD/MATRIX集提取一条记录.如果存在非空结果,我想要那个.否则,我想要一个COUNT最高的那个.我该如何查询?
CON      OWNER      METHOD      MATRIX  RESULT  COUNT
*CON_1   OWNER_1    METHOD_A    SOLID   NULL    503
CON_1    OWNER_1    METHOD_A    SOLID   NULL    1
*CON_1   OWNER_1    METHOD_A    SOIL    NULL    1305
CON_1    OWNER_1    METHOD_A    SOIL    NULL    699
*CON_2   OWNER_2    METHOD_B    SOLID   290     687
CON_2    OWNER_2    METHOD_B    SOLID   NULL    NULL
CON_2    OWNER_2    METHOD_B    SOLID   450     600
CON_2    OWNER_2    METHOD_B    WATER   NULL    1
*CON_2   OWNER_2    METHOD_B    WATER   400     NULL
为了一个结果,我想只有星号记录,我正在展示每组如何分组.
这是不好的SQL:
select top (1) CON, OWNER, METHOD, MATRIX, RESULT, COUNT
from #TempTable
group by CON, OWNER, METHOD, MATRIX
order by CON, OWNER, METHOD, MATRIX, COUNT
...因为我的计数不是聚合函数的一部分.它也不处理RESULT为NULL,并且top(1)不会从每个分组返回1.但是,通过使用更复杂的查询(例如基于如何从子查询中选择多个列(在SQL Server中)的问题,我应该有一个记录(选择前1)的问题)主查询?)
如何从每个分组中选择一个?
Pau*_*sey 11
试试这个,不是100%确定语法是正确的,但它很接近.
select 
    * 
from
    (select
        CON,
        OWNER,
        METHOD,
        MATRIX,
        RESULT,
        COUNT,
        RANK() OVER(PARTITION BY CON, OWNER, METHOD,MATRIX ORDER BY RESULT,COUNT DESC) as rnk
    FROM #TempTable
) a
WHERE rnk = 1
| 归档时间: | 
 | 
| 查看次数: | 10213 次 | 
| 最近记录: |