急救!DataTable合并行,或者sql合并行!谢谢啊

microns 2009-07-05 03:28:28
现在数据库提取出来的数据是这样的:
GroupItem SubItem desc currency amount
1 1.1 TEST RMB 4232.23
1 1.1 TEST2 HKD 3343.1
1 1.2 TEST RMB 3434.3

页面上显示要把相同SubItem的显示为一行,但是数据库里是多行,绑定到gridview上也是多行。我在数据和DataTabel里都试了一下,都还没有成功,望高人解答


页面显示结果:
GroupItem SubItem desc RMB HKD
1 1.1 TEST 4232.23 3343.1
1 1.2 TEST 3434.3

万分感谢啊!
...全文
345 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
antanger 2010-05-04
  • 打赏
  • 举报
回复
学习了,谢谢
liangCK 2009-07-05
  • 打赏
  • 举报
回复
-------------------------------------
-- Author : liangCK 梁爱兰
-- Comment: 小梁 爱 兰儿
-- Date : 2009-07-05 16:43:40
-------------------------------------

--> 生成测试数据: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
CREATE TABLE [tb] (GroupItem INT,SubItem NUMERIC(2,1),[desc] VARCHAR(5),currency VARCHAR(3),amount NUMERIC(6,2))
INSERT INTO [tb]
SELECT 1,1.1,'TEST','RMB',4232.23 UNION ALL
SELECT 1,1.1,'TEST2','HKD',3343.1 UNION ALL
SELECT 1,1.2,'TEST','RMB',3434.3

--编写存储过程:

GO

CREATE PROC dbo.DynamicRowToCol
AS
SET NOCOUNT ON;

DECLARE @sql nvarchar(4000);
SET @sql = N'';

SELECT
@sql = @sql + N',SUM(CASE WHEN currency=''' + currency
+ N''' THEN amount ELSE 0 END) AS [' + currency + N']'
FROM (SELECT DISTINCT currency FROM tb) AS A;

SET @sql = N'SELECT GroupItem,SubItem,MIN([desc]) AS [desc]' + @sql
+ N' FROM tb GROUP BY GroupItem,SubItem';

EXEC sp_executesql @sql;
GO

EXEC dbo.DynamicRowToCol;

GO
DROP TABLE tb;
DROP PROC dbo.DynamicRowToCol;
koukoujiayi 2009-07-05
  • 打赏
  • 举报
回复
有空再来看!!
microns 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wuyq11 的回复:]
行转列
参考
参考
[/Quote]
看了一下,第一个没有看明白
第二个,倒有点像我的这种要求,他的语文,数学这几个属性类似于我这里的RMB,HKD,但是我这里的是动态的,该怎么写个函数啊! 万分感谢啊!
BernardSun 2009-07-05
  • 打赏
  • 举报
回复

select GroupItem,SubItem,
RMB =sum(case when currency='RMB' then amount else 0 end),
HKD =sum(case when currency='HKD' then amount else 0 end)
from tb
group by GroupItem,SubItem

给你写了一个,如果想用动态的就参考10楼写函数,都贴出来了我就不写了
wuyq11 2009-07-05
  • 打赏
  • 举报
回复
行转列
参考
参考
microns 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bernardsun 的回复:]
desc 合并后变成TEST根据什么
currency 值就这两种还是无限多
[/Quote]
desc 先不管,数据设计的问题,随便取一个就是了
currency 有五种, 五种货币种类是动态的
OnlyAlone 2009-07-05
  • 打赏
  • 举报
回复
好像比较难办,只用一个SQL语句处理不了,也许可以考虑存储过程。
或者在代码中处理。那就比较简单了。
BernardSun 2009-07-05
  • 打赏
  • 举报
回复
desc 合并后变成TEST根据什么
currency 值就这两种还是无限多
microns 2009-07-05
  • 打赏
  • 举报
回复
还有货币种类HKD,RMB是动态的,一共有五种,我只列了两种上来
microns 2009-07-05
  • 打赏
  • 举报
回复
回答 二楼:
amount 不能求和的,必须每项展示出来
OnlyAlone 2009-07-05
  • 打赏
  • 举报
回复
没看清题目要求,不好意思。
OnlyAlone 2009-07-05
  • 打赏
  • 举报
回复
好像直接
SELECT DISTINCT
  • FROM
  • [TableName]
    也可以。
    就是在SELECT语句中加入DISTINCT谓词。
thinkingforever 2009-07-05
  • 打赏
  • 举报
回复
行变列,可以用sql语句实现,也可以用代码构造一个新的datatable;
sql
select GroupItem ,SubItem , desc, sum(amount )as RMB
where currency=‘RMB’ group by GroupItem ,SubItem , desc
union
select GroupItem ,SubItem , desc, sum(amount )as HKD
where currency=‘HKD’ group by GroupItem ,SubItem , desc

datatable实现就是新建一个datatable,列包括GroupItem、SubItem、desc、RMB、HKD 。然后从原来的datatable中根据GroupItem、SubItem、desc、currency(值为RMB) 求和,然后把数据插入到新的 datatable中。
OnlyAlone 2009-07-05
  • 打赏
  • 举报
回复
SELECT
  • FROM
  • [TableName] WHERE [SubItem] IN (SELECT DISTINCT [SubItem] FROM [TableName])
    也许能解决问题,查阅一下DISTINCT谓词或者其它SELECT语句的谓词的用法,这个解决办法即使能解决问题也比较蹩脚。

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧