我的数据表是这样的 id,category(项目名称),purname(细项名称)
----------------------------------
id category purname
--------------------------------
1 水电费 房屋水电1
2 水电费 房屋水电2
3 印刷费 印刷费1
4 印刷费 印刷费2
--------------------------------
现在想输出如下的格式的表格:
-----------------------
序号 项目名称 细项名称
-----------------------------
1 水电费
房屋水电1
房屋水电2
2 印刷费
印刷费1
印刷费2
------------------------
根据项目名称来分组获取数据,小妹刚接触这个数据库不久,很多地方不太清楚,请各位大哥大姐帮帮忙!!!
如果你非要实现这个功能的话,那你用一个独立的sql是不行的。
你一个用存储过程,声明一个临时表-->游标便利数据表-->判断是否和上一行相同-->插入临时表。
或者就是在取出数据后,在程序列表显示之前触发事件来更改显示数据。或者页面绑定跟的时候在这一列增加上一行比较的逻辑判断。
附上存储过程:
create table #temp(
id int,
category char(8),
purname varchar(32))
insert into #temp select * from temp order by category
declare @pre varchar(32),@category varchar(32)
DECLARE myCursor CURSOR FOR select category from #temp for update of category
open myCursor
FETCH next from myCursor into @category
While(@@Fetch_Status = 0)
Begin
if(@pre=@category)
begin
update #temp set category='' where current of myCursor
end
select @pre=@category
fetch next from myCursor into @category
end
close myCursor
DEALLOCATE myCursor
select * from #temp
效果见下图
select * from 表名 groups by category order by id
SQL语句好像不能这样输出.
不过,你可以自己用代码实现这样的输出效果!
我理解楼主的意图
不过不建议在查询里这样处理,因为这样不利于程序的复用,建议采用DataGridView进行处理,或者采用PivoteTable这样,可以实现钻取的表格实现,Rdlc应该可以满足你的需求,可以研究一下
可以在这个表中添加一个字段 显示标志xsbz,如果该字段为1则显示category 的值,否则不显示
alter table aa add xsbz char(3);--没有用过SQL Server,数据类型自己看着修改,字符型的就行了
--更新显示标志,第一个项目名称则显示,否则不显示
UPDATE aa SET xsbz='1' WHERE ID IN (SELECT ID FROM (SELECT MIN(ID) ID,CATEGORY FROM aa GROUP BY category));
--查询
SELECT CASE xsbz WHEN '1' THEN CATEGORY ELSE '' END category,purname FROM aa;