查询组摘要,如报告

Query for group summary like report

我有一个 table 如下所示

ID     value       
----   ------  
1      A1           
1      A2        
1      A3           
2      B1        
2      B2        
2      B3   

我需要使用 SQL Server 2000 编写查询,显示如下所示的输出

ID       value       
----     ------  
1         A1           
Null      A2        
Null      A3           
2         B1        
Null      B2        
Null      B3  

这种报表样式格式最好在适当的报表应用程序中完成,但也可以在服务器上完成。

如果您使用的是 SQL 服务器版本 >= 2005(您现在确实应该这样做),您可以使用 window 函数来轻松完成此操作,如下所示:

select case when rn = 1 then id else null end as id, value 
from (
    select *, rn = row_number() over (partition by id order by id, value) 
    from your_table
    ) a

但是由于您使用的是没有 row_number 功能的旧版本,我们必须以某种方式模拟它。一种方法是在相关子查询中使用 运行 行计数 - 这应该有效,但效率不是特别高。

select 
    case when (
       select count(*) 
       from your_table 
       where value <= t1.value 
       and ID = t1.ID
    ) = 1 then ID 
       else null end as id
       , value
from your_table as t1

因为我无法访问旧版本的任何服务器,所以我无法对其进行测试,但我看不出有任何明显的原因表明它不应该工作。

同意最好在表示层完成此操作的共识,但在 SQL 中执行此操作的一种方法是

SELECT fv.ID,
       T1.value
FROM   Table1 T1
       LEFT JOIN (SELECT ID,
                         MIN([value]) AS FirstVal
                  FROM   Table1
                  GROUP  BY ID) AS fv
         ON T1.ID = fv.ID
            AND T1.value = fv.FirstVal
ORDER  BY T1.ID,
          T1.value