﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-昆明.net技术前线</title><link>http://www.cnblogs.com/boundless/</link><description>共同讨论.net,大家共同进步!</description><language>zh-cn</language><lastBuildDate>Thu, 08 Jan 2009 05:01:19 GMT</lastBuildDate><pubDate>Thu, 08 Jan 2009 05:01:19 GMT</pubDate><ttl>60</ttl><item><title>通用动态交叉表的实现</title><link>http://www.cnblogs.com/boundless/archive/2006/11/09/555638.html</link><dc:creator>昆明.net技术前线</dc:creator><author>昆明.net技术前线</author><pubDate>Thu, 09 Nov 2006 09:54:00 GMT</pubDate><guid>http://www.cnblogs.com/boundless/archive/2006/11/09/555638.html</guid><wfw:comment>http://www.cnblogs.com/boundless/comments/555638.html</wfw:comment><comments>http://www.cnblogs.com/boundless/archive/2006/11/09/555638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/boundless/comments/commentRss/555638.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/boundless/services/trackbacks/555638.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p><br />
-- ============================================================================<br />
-- 通用动态交叉表的实现<br />
-------------------------------------------------------------------------------<br />
-- usp_Crosstab<br />
-------------------------------------------------------------------------------</p>
<p>CREATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROCEDURE usp_Crosstab <br />
&nbsp;@table varchar(50), &nbsp;&nbsp;--表名<br />
&nbsp;@sumRow varchar(8000),&nbsp;&nbsp;--合计列字段<br />
&nbsp;@groupRow varchar(1000), &nbsp;--分组列字段 <br />
&nbsp;@col varchar(50), &nbsp;&nbsp;--要将列值转换为列的列字段<br />
&nbsp;@colTable varchar(1000),&nbsp;--要将列值转换为列的列字段表<br />
&nbsp;@Sortfield&nbsp;varchar(100),&nbsp;--要将列值转换为列的列字段表排序字段<br />
&nbsp;@SubSortfield&nbsp;varchar(100),&nbsp;--要将列值转换为列的列字段表子排序字段&nbsp;&nbsp;<br />
&nbsp;@content varchar(50), &nbsp;&nbsp;--列值转换为列后列的内容字段<br />
&nbsp;@showSum varchar(50),&nbsp;&nbsp;--显示总计列名<br />
&nbsp;@showSubtotal varchar(50),&nbsp;--显示小计列<br />
&nbsp;@where&nbsp;varchar(8000)&nbsp;&nbsp;--查询条件<br />
AS <br />
&nbsp;DECLARE @declareSql varchar(8000), &nbsp;--变量定义的SQL<br />
&nbsp;&nbsp;@initSql varchar(8000), &nbsp;--初始变量的SQL<br />
&nbsp;&nbsp;@SubsectionSQL varchar(8000), &nbsp;--读取以4000分段后数据的SQL<br />
&nbsp;&nbsp;@CombinationSQL varchar(8000), &nbsp;--分段后各个变量组合的SQL<br />
&nbsp;&nbsp;@EndFromSQL varchar(8000), &nbsp;--组合的后辍(表名、分组列名)的SQL<br />
&nbsp;&nbsp;@i int, &nbsp;&nbsp;&nbsp;--根据4000为分段迭代得到的i<br />
&nbsp;&nbsp;@ic varchar(50), &nbsp;&nbsp;--转成字符串后的i<br />
&nbsp;&nbsp;@mc varchar(50) &nbsp;&nbsp;--变量的个数</p>
<p><br />
&nbsp;EXEC('select ID=Identity(int,1,1),COL=''sum(case <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#99;&#111;&#108;&#43;&#39;">'+@col+'</a> when </p>
<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#39;&#39;&#39;&#39;&#39;&#43;&#39;&#43;&#64;&#99;&#111;&#108;&#43;&#39;&#43;&#39;&#39;&#39;&#39;&#39;&#39;">''''''+'+@col+'+''''''</a> then <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#99;&#111;&#110;&#116;&#101;&#110;&#116;&#43;&#39;">'+@content+'</a> else 0 end) as <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#39;&#39;&#39;&#39;&#39;&#43;&#39;&#43;&#64;&#99;&#111;&#108;&#43;&#39;&#43;&#39;&#39;&#39;&#39;&#39;&#39;&#44;&#39;&#39;">''''''+'+@col+'+'''''',''</a> </p>
<p>,GID=0,Sort= <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#83;&#111;&#114;&#116;&#102;&#105;&#101;&#108;&#100;&#43;&#39;">'+@Sortfield+'</a>, SubSort = <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#83;&#117;&#98;&#83;&#111;&#114;&#116;&#102;&#105;&#101;&#108;&#100;&#43;&#39;">'+@SubSortfield+'</a> into ##tmp from (select </p>
<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#99;&#111;&#108;&#43;&#39;&#61;&#114;&#101;&#112;&#108;&#97;&#99;&#101;&#40;&#39;&#43;&#64;&#99;&#111;&#108;&#43;&#39;&#44;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#44;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#41;&#44;&#39;&#43;&#64;&#83;&#111;&#114;&#116;&#102;&#105;&#101;&#108;&#100;&#43;&#39;&#44;&#39;&#43;&#64;&#83;&#117;&#98;&#83;&#111;&#114;&#116;&#102;&#105;&#101;&#108;&#100;&#43;&#39;">'+@col+'=replace('+@col+','''''''',''''''''''''),'+@Sortfield+','+@SubSortfield+'</a> from </p>
<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#99;&#111;&#108;&#84;&#97;&#98;&#108;&#101;&#43;&#39;&#41;&#97;&#39;">'+@colTable+')a'</a>) </p>
<p>&nbsp;SELECT @i=MAX(len(COL)) FROM ##tmp <br />
&nbsp;SET @i=4000/@i <br />
&nbsp;<br />
&nbsp;UPDATE ##tmp SET <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#71;&#73;&#68;&#61;&#73;&#68;&#47;&#64;&#105;">GID=ID/@i</a> <br />
&nbsp;<br />
&nbsp;SELECT @i=MAX(GID),@mc=cast(@i AS varchar(50)) FROM ##tmp <br />
&nbsp;SELECT </p>
<p>@declareSql='',@initSql='',@SubsectionSQL='',@CombinationSQL='',@EndFromSQL='' <br />
&nbsp;<br />
&nbsp;<br />
&nbsp;WHILE @i&gt;=0 <br />
&nbsp;BEGIN<br />
&nbsp;&nbsp;SELECT @ic=cast(@i AS varchar(50)),@i=@i-1,@declareSql='@'+@ic+' as </p>
<p>varchar(4000),'+@declareSql,@initSql='@'+@ic+'='''','+@initSql, <br />
&nbsp;&nbsp;@SubsectionSQL='select @'+@ic+'=@'+@ic+'+COL from ##tmp where </p>
<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#103;&#105;&#100;&#61;&#39;&#39;&#39;&#43;&#64;&#105;&#99;&#43;&#39;&#39;&#39;">gid='''+@ic+'''</a> order by Sort, SubSort '+char(13)</p>
<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#43;&#64;&#83;&#117;&#98;&#115;&#101;&#99;&#116;&#105;&#111;&#110;&#83;&#81;&#76;&#44;&#64;&#67;&#111;&#109;&#98;&#105;&#110;&#97;&#116;&#105;&#111;&#110;&#83;&#81;&#76;&#61;&#39;&#64;&#39;&#43;&#64;&#105;&#99;&#43;&#39;&#43;&#39;&#43;&#64;&#67;&#111;&#109;&#98;&#105;&#110;&#97;&#116;&#105;&#111;&#110;&#83;&#81;&#76;">+@SubsectionSQL,@CombinationSQL='@'+@ic+'+'+@CombinationSQL</a> <br />
&nbsp;END<br />
&nbsp;<br />
&nbsp;SET @EndFromSQL=''' into ##CrossTable&nbsp; from <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#116;&#97;&#98;&#108;&#101;&#43;&#39;">'+@table+'</a> where <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#119;&#104;&#101;&#114;&#101;&#43;&#39;">'+@where+'</a> group by </p>
<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#103;&#114;&#111;&#117;&#112;&#82;&#111;&#119;&#43;&#39;&#39;&#39;&#39;">'+@groupRow+''''</a> <br />
&nbsp;SELECT @declareSql='declare '+left(@declareSql,len(@declareSql)-1)+char</p>
<p>(13),@initSql='select '+left(@initSql,len(@initSql)-1)+char(13),@CombinationSQL=left</p>
<p>(@CombinationSQL,len(@CombinationSQL)-1) <br />
&nbsp;EXEC(@declareSql+@initSql+@SubsectionSQL+ <br />
&nbsp;'set @'+@mc+'=left(@'+@mc+',len(@'+@mc+')-1)'+ <br />
&nbsp;'exec(''select <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#115;&#117;&#109;&#82;&#111;&#119;&#43;&#39;&#44;&#39;&#39;&#43;&#39;&#43;&#64;&#67;&#111;&#109;&#98;&#105;&#110;&#97;&#116;&#105;&#111;&#110;&#83;&#81;&#76;&#43;&#39;&#43;&#39;&#43;&#64;&#69;&#110;&#100;&#70;&#114;&#111;&#109;&#83;&#81;&#76;&#43;&#39;&#41;&#39;">'+@sumRow+',''+'+@CombinationSQL+'+'+@EndFromSQL+')'</a><br />
&nbsp;)</p>
<p>&nbsp;EXEC('UPDATE ##CrossTable SET <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#115;&#104;&#111;&#119;&#83;&#117;&#109;&#43;&#39;">'+@showSum+'</a> = ''总计'', <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#115;&#104;&#111;&#119;&#83;&#117;&#98;&#116;&#111;&#116;&#97;&#108;&#43;&#39;">'+@showSubtotal+'</a> = null </p>
<p>WHERE <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#115;&#104;&#111;&#119;&#83;&#117;&#109;&#43;&#39;">'+@showSum+'</a> IS NULL ')</p>
<p>&nbsp;SELECT * FROM ##CrossTable<br />
&nbsp;DROP TABLE ##tmp <br />
&nbsp;DROP TABLE ##CrossTable </p>
<p>&nbsp;GO<br />
<br />
</p>
<img src ="http://www.cnblogs.com/boundless/aggbug/555638.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44368/" target="_blank">中国计算机报：找寻IT产业的耐寒基因</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>DataGrid中实现输入数量和金额自动计算出总金额 </title><link>http://www.cnblogs.com/boundless/archive/2005/02/17/105065.html</link><dc:creator>昆明.net技术前线</dc:creator><author>昆明.net技术前线</author><pubDate>Thu, 17 Feb 2005 02:19:00 GMT</pubDate><guid>http://www.cnblogs.com/boundless/archive/2005/02/17/105065.html</guid><wfw:comment>http://www.cnblogs.com/boundless/comments/105065.html</wfw:comment><comments>http://www.cnblogs.com/boundless/archive/2005/02/17/105065.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/boundless/comments/commentRss/105065.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/boundless/services/trackbacks/105065.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>&lt;script language="javascript"&gt;</p>
<p>&nbsp;//四舍五入&nbsp;<br />
&nbsp;Number.prototype.toFixed=function(len) <br />
&nbsp;{ <br />
&nbsp; var add = 0; <br />
&nbsp; var s,temp; <br />
&nbsp; var l = this + ""; <br />
&nbsp; var start = l.indexOf("."); <br />
&nbsp; if(l.substr(start+len+1,1)&gt;=5)add=1; <br />
&nbsp; var temp = Math.pow(10,len); <br />
&nbsp; s = Math.floor(this * temp) + add; <br />
&nbsp; return s/temp; <br />
&nbsp;} <br />
&nbsp; <br />
&nbsp;//实现计算金额&nbsp;<br />
&nbsp;function count(obj) <br />
&nbsp;{ <br />
&nbsp; var regInt = /^\d+$/; <br />
&nbsp; var regMondy = /^(0|[1-9]\d*)$|^(0|[1-9]\d*)\.(\d+)$/; </p>
<p>&nbsp; // 找出TextBox <br />
&nbsp; var objParent = obj.parentElement.parentElement; <br />
&nbsp; var textBoxs = objParent.getElementsByTagName("input"); <br />
&nbsp; var TxtGoodsNum = null; <br />
&nbsp; var TxtGoodsSinglePrice = null; <br />
&nbsp; var TxtGoodsSumPrice = null; <br />
&nbsp; <br />
&nbsp; for( var i=0;i &lt; textBoxs.length;i ++) <br />
&nbsp; { <br />
&nbsp;&nbsp; if(textBoxs[i].id.indexOf("txtGoodsNum") != -1) <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; TxtGoodsNum = textBoxs[i]; <br />
&nbsp;&nbsp; } <br />
&nbsp;&nbsp; else if(textBoxs[i].id.indexOf("txtGoodsSinglePrice") != -1) <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; TxtGoodsSinglePrice = textBoxs[i]; <br />
&nbsp;&nbsp; } <br />
&nbsp;&nbsp; else if(textBoxs[i].id.indexOf("txtGoodsSumPrice") != -1) <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; TxtGoodsSumPrice = textBoxs[i]; <br />
&nbsp;&nbsp; } <br />
&nbsp; } </p>
<p>&nbsp; if(!regInt.test(TxtGoodsNum.value)) <br />
&nbsp; { <br />
&nbsp;&nbsp; alert("数量只能是数字，请您重新输入数量。"); <br />
&nbsp;&nbsp; return; <br />
&nbsp; } <br />
&nbsp; if(!regMondy.test(TxtGoodsSinglePrice.value)) <br />
&nbsp; { <br />
&nbsp;&nbsp; alert("单价只能是数字，请您重新输入单价。"); <br />
&nbsp;&nbsp; return; <br />
&nbsp; } <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; var GoodsNum = parseInt(TxtGoodsNum.value); //数量 <br />
&nbsp; var SinglePrice = parseFloat(TxtGoodsSinglePrice.value); //单价 <br />
&nbsp; var GoodsSumPrice = GoodsNum * SinglePrice; <br />
&nbsp; <br />
&nbsp; TxtGoodsSumPrice.value = GoodsSumPrice.toFixed(3).toString(); <br />
&nbsp;} <br />
&nbsp; <br />
&lt;/script&gt; </p>
<p>&nbsp;</p>
<p>调用：</p>
<p>&lt;asp:TextBox id=txtGoodsNum onblur=count(this) runat="server" Text='&lt;%# DataBinder.Eval(Container, "DataItem.Goods_Num") %&gt;' Width="60px"&gt; <br />
</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/boundless/aggbug/105065.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44367/" target="_blank">SNS画地为牢：霸王条款梗住了谁</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>