首页 新闻 赞助 找找看

急,急!!!!!请求帮助!!关于数据查询问题

0
悬赏园豆:50 [已解决问题] 解决于 2010-02-26 10:09

我的数据表是这样的 id,category(项目名称),purname(细项名称)

----------------------------------

id   category   purname

--------------------------------

1    水电费       房屋水电1

2    水电费      房屋水电2

3    印刷费      印刷费1

4    印刷费      印刷费2

--------------------------------

现在想输出如下的格式的表格:

-----------------------

序号    项目名称   细项名称

-----------------------------

1       水电费

                         房屋水电1

                         房屋水电2

2      印刷费       

                         印刷费1

                         印刷费2

------------------------

根据项目名称来分组获取数据,小妹刚接触这个数据库不久,很多地方不太清楚,请各位大哥大姐帮帮忙!!!

问题补充: 是这样的!我用了一个报表工具,需要从数据库中直接提取表,所以只能用sql来实现这样的功能! 我的sql是这样写的: select distinct Category,'' as purname from dbo.DecentralPurchase union all select '' as category,purname from dbo.DecentralPurchase group by category,purname 输出的结果是这样的: id category purname 1 水电费 2 印刷费 3 (空) 房屋书电1 4 (空) 房屋水电2 5 (空) 印刷费1 6 (空) 印刷费2 有没办法把第3,4行插入到第一行下面 把第5,6行插入到印刷费下面!!
珠儿的主页 珠儿 | 初学一级 | 园豆:4
提问于:2010-02-24 14:42
< >
分享
最佳答案
0

如果你非要实现这个功能的话,那你用一个独立的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

效果见下图

收获园豆:50
邢少 | 专家六级 |园豆:10926 | 2010-02-24 15:42
其他回答(4)
0

select * from 表名 groups by category order by id

Ou lei | 园豆:619 (小虾三级) | 2010-02-24 15:03
不是的 是想输出---------------------- 序号 项目名称 细项名称 ----------------------------- 1 水电费 房屋水电1 房屋水电2 2 印刷费 印刷费1 印刷费2 这个格式的表格,您这个语句就已经不行了
支持(0) 反对(0) 珠儿 | 园豆:4 (初学一级) | 2010-02-24 15:11
@珠儿:你是想把多条数据整合成一句还是?
支持(0) 反对(0) Ou lei | 园豆:619 (小虾三级) | 2010-02-24 15:13
我想直接用sql 查出这中样式的表格
支持(0) 反对(0) 珠儿 | 园豆:4 (初学一级) | 2010-02-24 15:20
@珠儿:据我的理解sql不能查出你上面那种格式的表格,不过可以像楼下说的,你可以在程序里面去实现
支持(0) 反对(0) Ou lei | 园豆:619 (小虾三级) | 2010-02-24 15:25
0

SQL语句好像不能这样输出.

不过,你可以自己用代码实现这样的输出效果!

一滴血 | 园豆:1602 (小虾三级) | 2010-02-24 15:14
0

我理解楼主的意图

不过不建议在查询里这样处理,因为这样不利于程序的复用,建议采用DataGridView进行处理,或者采用PivoteTable这样,可以实现钻取的表格实现,Rdlc应该可以满足你的需求,可以研究一下

查尔斯 | 园豆:3832 (老鸟四级) | 2010-02-24 15:28
0

可以在这个表中添加一个字段 显示标志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;

新手打酱油 | 园豆:109 (初学一级) | 2010-02-24 15:31
我回去研究下,谢谢您的建议!!!
支持(0) 反对(0) 珠儿 | 园豆:4 (初学一级) | 2010-02-24 16:50
@珠儿:效果和你想要的差不多,真要做到你想要的效果的话,估计上面的几个SQL还是不行的
支持(0) 反对(0) 新手打酱油 | 园豆:109 (初学一级) | 2010-02-24 17:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册