问题描述
winform(c#)连接数据库查询出的数据格式如下:7135000月租费207135000市话费207135000长话费20我想显示为如下格式:电话号码月租费市话费长话费7135000202020请问如何实现?急!
解决方案
解决方案二:
createtablet(telephonevarchar(10),fnamevarchar(10),feeint)goinsertintotvalues('7135000','月租费',20)insertintotvalues('7135000','市话费',20)insertintotvalues('7135000','长话费',20)go--我想显示为如下格式:电话号码月租费市话费长话费--7135000202020selecttelephoneas电话号码,max(casefnamewhen'月租费'thenfeeelse0end)as'月租费',max(casefnamewhen'市话费'thenfeeelse0end)as'市话费',max(casefnamewhen'长话费'thenfeeelse0end)as'长话费'fromtgroupbytelephonedroptablet
解决方案三:
厉害,SQL
解决方案四:
createtable#Tel(telIDintidentity(1,1)notnull,TelCodevarchar(20),TelKindvarchar(50),TelFaremoney)insert#Telvalues(7135000,'Month',20)insert#Telvalues(7135000,'City',20)insert#Telvalues(7135000,'Long',20)select*from#TelselectTelCode,Max(caseTelKindwhen'Month'thenTelFareelse0end)as'Month',Max(CaseTelKindwhen'City'thenTelFareelse0end)as'City',Max(CaseTelKindwhen'Long'thenTelFareelse0end)as'Long'from#TelgroupbyTelCodedroptable#Tel
解决方案五:
跟一楼的一样。(回复内容太短了!)
解决方案六:
学习+关注!!帮你顶!!
解决方案七:
假设你的表如下:table1电话号码fif27135000月租费207135000市话费207135000长话费20select电话号码,月租费,市话费,长话费from(select电话号码,f1,f2fromtable1)ppivot(count(f2)forfiin(月租费,市话费,长话费))astable2orderby电话号码
解决方案八:
一楼的,厉害!完全同意.
解决方案九:
列转行!学习,呵呵^^^^^^&
解决方案十:
看来已经解决了我学习下!我是小菜鸟!说的不好清见谅,希望能够帮到你!
解决方案十一:
一楼厉害,二楼也厉害
解决方案十二:
自己写一个Sql存储过程createprocproc_test@tel_numvarchar(13)as--假设你的原始表为feelistselect电话号码[字段1],费用类别[字段2],费用sum([字段3])into#tmp1fromfeelistwhere[字段1]like@tel_num+'%'groupby[字段1],[字段2]--若有其他费用,可添加列createtable#tmp2{[电话号码]varchar(13),[月租费]decimal(10,2),[市话费]decimal(10,2),[长话费]decimal(10,2)}--向#tmp2表中插入你想要得到的数据declare@telvarchar(13)declare@cur_testcursorfast_forwardforselect[电话号码]from#tmp1gourpby[电话号码]orderyb[电话号码]--可能会有多个电话号码fetechnextfrom@cur_testinto@telwhile(fetech_status<>-1)begininsertinto@tmp2values(@tel,(select[费用]fromtmp1where[电话号码]=@teland[费用类别]='月租费'),(select[费用]fromtmp1where[电话号码]=@teland[费用类别]='市话费'),(select[费用]fromtmp1where[电话号码]=@teland[费用类别]='长话费'))ftechnextfrom@cur_testinto@telendclose@cur_testdeallocate@cur_testselect*from#tmp2客户端调用:SqlCommandcmd=newSqlCommand();cmd.CommandText="execproc_test('7135000')";
解决方案十三:
createtable#tbl(telephonevarchar(10),fnamevarchar(10),feeint)setnocountoninsertinto#tblvalues('7135000','月租费',20)insertinto#tblvalues('7135000','市话费',20)insertinto#tblvalues('7135000','长话费',20)insertinto#tblvalues('7135001','信息费',20)declare@ExecSqlvarchar(200)select@ExecSql=''createtable#YbTable(telephonevarchar(10))insertinto#YbTable(telephone)selectdistincttelephonefrom#Tbldeclare@Itemvarchar(10)declareItemcursorforselectdistinctfnamefrom#tblopenItemfetchnextfromIteminto@Itemwhile@@fetch_status=0beginselect@ExecSql='altertable#YbTableadd'+@Item+'int'exec(@ExecSql)select@ExecSql='update#YbTableset'+@Item+'=feefrom#Tblwherefname='''+@Item+'''and#YbTable.telephone=#Tbl.telephone'exec(@ExecSql)fetchnextfromIteminto@ItemendcloseItemdeallocateItemselect*from#YbTabledroptable#tbldroptable#YbTable
解决方案十四:
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[t]')andOBJECTPROPERTY(id,N'IsUserTable')=1)droptable[dbo].[t]GOcreatetablet([id]varchar(20),typevarchar(20),totalnumeric(12,2))inserttselect'7135000','月租费',20unionallselect'7135000','市话费',20unionallselect'7135000','长话费',20select*fromtselect'电话号码'=[id],'月租费'=sum(casetypewhen'月租费'thentotalelse0end),'市话费'=sum(casetypewhen'市话费'thentotalelse0end),'长话费'=sum(casetypewhen'长话费'thentotalelse0end)fromtgroupby[id]--动态SQLdeclare@strvarchar(4000)select@str='select电话号码=[id]'select@str=@str+',['+type+']=sum(casetypewhen'''+type+'''thentotalelse0end)'fromtgroupbytypeexec(@str+'fromtgroupby[id]')droptablet/*(所影响的行数为3行)idtypetotal------------------------------------------------------7135000月租费20.007135000市话费20.007135000长话费20.00(所影响的行数为3行)电话号码月租费市话费长话费--------------------------------------------------------------------------------------------------------------------------------------------713500020.0020.0020.00(所影响的行数为1行)电话号码长话费市话费月租费--------------------------------------------------------------------------------------------------------------------------------------------713500020.0020.0020.00*/
解决方案十五:
转SQL版龟帖:/*普通行列转换(爱新觉罗.毓华2007-11-18于海南三亚)假设有张学生成绩表(tb)如下:NameSubjectResult张三语文 74张三数学 83张三物理 93李四语文 74李四数学 84李四物理 94*/-------------------------------------------------------------------------/*想变成姓名语文数学物理-------------------------------------------李四748494张三748393*/createtabletb(Namevarchar(10),Subjectvarchar(10),Resultint)insertintotb(Name,Subject,Result)values('张三','语文',74)insertintotb(Name,Subject,Result)values('张三','数学',83)insertintotb(Name,Subject,Result)values('张三','物理',93)insertintotb(Name,Subject,Result)values('李四','语文',74)insertintotb(Name,Subject,Result)values('李四','数学',84)insertintotb(Name,Subject,Result)values('李四','物理',94)go--静态SQL,指subject只有语文、数学、物理这三门课程。selectname姓名,max(casesubjectwhen'语文'thenresultelse0end)语文,max(casesubjectwhen'数学'thenresultelse0end)数学,max(casesubjectwhen'物理'thenresultelse0end)物理fromtbgroupbyname/*姓名语文数学物理-------------------------------------------李四748494张三748393*/--动态SQL,指subject不止语文、数学、物理这三门课程。declare@sqlvarchar(8000)set@sql='selectNameas'+'姓名'select@sql=@sql+',max(caseSubjectwhen'''+Subject+'''thenResultelse0end)['+Subject+']'from(selectdistinctSubjectfromtb)asaset@sql=@sql+'fromtbgroupbyname'exec(@sql)/*姓名数学物理语文-------------------------------------------李四849474张三839374*/-------------------------------------------------------------------/*加个平均分,总分姓名语文数学物理平均分总分--------------------------------------------------------------------------李四74849484.00252张三74839383.33250*/--静态SQL,指subject只有语文、数学、物理这三门课程。selectname姓名,max(casesubjectwhen'语文'thenresultelse0end)语文,max(casesubjectwhen'数学'thenresultelse0end)数学,max(casesubjectwhen'物理'thenresultelse0end)物理,cast(avg(result*1.0)asdecimal(18,2))平均分,sum(result)总分fromtbgroupbyname/*姓名语文数学物理平均分总分--------------------------------------------------------------------------李四74849484.00252张三74839383.33250*/--动态SQL,指subject不止语文、数学、物理这三门课程。declare@sql1varchar(8000)set@sql1='selectNameas'+'姓名'select@sql1=@sql1+',max(caseSubjectwhen'''+Subject+'''thenResultelse0end)['+Subject+']'from(selectdistinctSubjectfromtb)asaset@sql1=@sql1+',cast(avg(result*1.0)asdecimal(18,2))平均分,sum(result)总分fromtbgroupbyname'exec(@sql1)/*姓名数学物理语文平均分总分--------------------------------------------------------------------------李四84947484.00252张三83937483.33250*/droptabletb------------------------------------------------------------------------------------------------------------------/*如果上述两表互相换一下:即姓名语文数学物理张三74 83 93李四74 84 94想变成NameSubjectResult----------------------------李四语文74李四数学84李四物理94张三语文74张三数学83张三物理93*/createtabletb1(姓名varchar(10),语文int,数学int,物理int)insertintotb1(姓名,语文,数学,物理)values('张三',74,83,93)insertintotb1(姓名,语文,数学,物理)values('李四',74,84,94)select*from(select姓名asName,Subject='语文',Result=语文fromtb1unionallselect姓名asName,Subject='数学',Result=数学fromtb1unionallselect姓名asName,Subject='物理',Result=物理fromtb1)torderbyname,caseSubjectwhen'语文'then1when'数学'then2when'物理'then3when'总分'then4end--------------------------------------------------------------------/*加个平均分,总分NameSubjectResult-------------------------------------李四语文74.00李四数学84.00李四物理94.00李四平均分84.00李四总分252.00张三语文74.00张三数学83.00张三物理93.00张三平均分83.33张三总分250.00*/select*from(select姓名asName,Subject='语文',Result=语文fromtb1unionallselect姓名asName,Subject='数学',Result=数学fromtb1unionallselect姓名asName,Subject='物理',Result=物理fromtb1unionallselect姓名asName,Subject='平均分',Result=cast((语文+数学+物理)*1.0/3asdecimal(18,2))fromtb1unionallselect姓名asName,Subject='总分',Result=语文+数学+物理fromtb1)torderbyname,caseSubjectwhen'语文'then1when'数学'then2when'物理'then3when'平均分'then4when'总分'then5enddroptabletb1
解决方案:
动态SQL适合项目比较多的情况
解决方案:
嗯。一楼强大,N楼强大
解决方案:
路过,收获不少?路过,收获不少?
解决方案:
哇,都是牛人啊收获大大滴有哦
解决方案:
ithinkthebestmethodisthatyouselectdatafromdatabaseastheformat:7135000202020anddatabandtoadatagridview
解决方案:
不好意思,我没有表达清楚,SQL语句我已经实现了正如一楼朋友的方法。我想问得是通过c#程序如何实现?
解决方案:
你要在窗体上这样显示数据还是什么意思?那就通过数据库操作在界面上用控件来绑定就可以了啊!
解决方案:
都~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~牛B啊
解决方案:
datagrid或gridview只能绑定出如下效果:7135000月租费207135000市话费207135000长话费20我想显示为如下格式:电话号码月租费市话费长话费7135000202020
解决方案:
解决方案:
引用20楼zhaoyong76的回复:
不好意思,我没有表达清楚,SQL语句我已经实现了正如一楼朋友的方法。我想问得是通过c#程序如何实现?
如果你用的和一楼一样的SQL语句的话,得到的结果就是电话号码月租费市话费长话费7135000202020的啊,你把数据填充到DataSet里面再绑定到DataGrid显示的也是一样的
解决方案:
引用25楼zzyhuian06142的回复:
引用20楼zhaoyong76的回复:不好意思,我没有表达清楚,SQL语句我已经实现了正如一楼朋友的方法。我想问得是通过c#程序如何实现?如果你用的和一楼一样的SQL语句的话,得到的结果就是电话号码月租费市话费长话费7135000202020的啊,你把数据填充到DataSet里面再绑定到DataGrid显示的也是一样的
我说的不也就是这意思嘛!SQL语句给你了都,你把SQL语句换成一楼那样,不就显示出你要的结果了嘛!感觉你很不变通,东西都已经有了,你也应该知道怎么绑定的,怎么就不会换条SQL语句呢?
解决方案:
楼上的朋友这种方法不通用,如果是MSsqlSERVER可以,informix数据库就不行。
解决方案:
数据都获得了,想怎么显示还不简单?你喜欢月租费电话号码市话费长话费2071350002020都得啦,
解决方案:
youcantransferthedatatoanothertableas7135000202020thendatabandtodatagrid
解决方案:
用CASE分类统计啦楼上几位也不错的
解决方案:
如果查询出来的数据定死了的话,可以考虑对DATATBLE做处理,把数据循环插入到新的表中,然后绑定数据
解决方案:
DATATABLE17135000月租费207135000市话费207135000长话费20DATATABLE2电话号码月租费市话费长话费7135000202020对DATATABLE1分组过滤,经过C#代码处理,写到DATATABLE2总的来说用C#来处理会有相当的运算量,尤其是需要做全表过滤
解决方案:
楼主的意思是在界面上处理格式吧。。。楼上的朋友们都太强了用控件吧,设置一个标头应该就可以了