我有一张表格,如下所示
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
答案 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
由于我无法访问使用旧版本的任何服务器,因此我无法对其进行测试,但我无法看到任何显而易见的原因,即它无法正常运行。