查询报告等组摘要

时间:2015-07-15 21:09:03

标签: sql-server sql-server-2000

我有一张表格,如下所示

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  

2 个答案:

答案 0 :(得分:1)

同意这一点最好在表示层中完成,但在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  

答案 1 :(得分:0)

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

如果您使用的是SQL Server版本> = 2005(您现在应该使用它),您可以使用窗口函数轻松完成此操作:

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

由于我无法访问使用旧版本的任何服务器,因此我无法对其进行测试,但我无法看到任何显而易见的原因,即它无法正常运行。