2011-11-28 96 views
1

我有这样一个表:显示列数据在SQL Server头2008

------------------- 
id class name  sub 
------------------------ 
1 mca aditya network 
2 mca abhishek daa 
3 mca akhilesh algorithm 
4 btech ram  cs 
5 btech shyam  ds 
6 btech anand  client/server 
7 mba furqan os 
8 mba arvind marketing 
9 mba aayush hr 

我想设置类似如下的结果:

---------------- 
class name  sub 
------------------------ 
mca  aditya network 
     abhishek daa 
     akhilesh algorithm 
btech ram  cs 
     shyam  ds 
     anand  client/server 
mba  furqan os 
     arvind marketing 
     aayush hr 

回答

3

我想你可能会更好处理这个在UI /显示层,但如果你需要查询,以做到在SQL 2008,您可以使用CTEROW_NUMBER()

WITH ordered AS 
(
    SELECT t.class, t.name, t.sub 
     , ROW_NUMBER() OVER (PARTITION BY t.class ORDER BY t.Name ASC) AS RowNumber 
    FROM myTable AS t 
) 
SELECT CASE 
      WHEN o.RowNumber = 1 THEN o.class 
      ELSE '' 
     END AS class 
    , o.name, o.sub 
FROM ordered AS o 

我不确定你要找什么样的排序/顺序。您的示例似乎仍然由Id进行排序。如果需要,可以将Id列添加到ordered CTE中,然后在查询结尾处添加ORDER BY o.Id ASC

+0

非常感谢它的成功! –

0

亚当的回答会的工作,但他的回答是最正确的部分是

你可能会更好在你的UI /显示层处理这一

你正在尝试做的是 - 说穿了 - 错了。下面说,例如,adityamca类,但abhishekakhilesh没有类。

class name  sub 
--------------------- 
mca  aditya network   
     abhishek daa   
     akhilesh algorithm 
btech ram  cs    
     shyam  ds 
     anand  client/server 

难道abhishekakhilesh没有课吗?当然不是。

因此,如果我有一个应用程序调用此存储过程或视图并查看此结果集,我该如何知道shyam属于哪个类?你不能说'这是btech,因为这是最后一堂课',因为你怎么知道结果被查看的顺序?您的查询中没有order by

+0

我以前见过至少一个其他类似的问题。当我这样做时,看起来两种情况下的OP都希望使用SQL来开发报表。我怀疑这会打印出来并显示给管理层,但这只是一个猜测。 –

+2

*握手*%* @ $ ing管理!!! –