sql数据过滤

来源:互联网 发布:linux下载文件到本地 编辑:程序博客网 时间:2024/06/08 17:22
 

一. 查找重复记录

1. 查找全部重复记录

Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)

2. 过滤重复记录(只显示一条)

Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)

注:此处显示ID最大一条记录

二. 删除重复记录


1. 删除全部重复记录(慎用)

Delete 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)

2. 保留一条

Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)

三. 过滤select查询得到的重复数据

1. 过滤一次select查询中的重复数据:

select distinct HZD from t_Table where MZD in (...)

     distinct

2. 过滤两次select查询中的重复数据:

select。。。where 。。(select 。。。。。。union select。。。。)

介绍几个SQL指令:

UNION,用于获取两个结果集的并集,会自动去掉结果集中的重复行,并会以第一列的结果进行排序

INTERSECT,用于获取两个结果集的交集,并且以第一列排序

MINUS,用于获取结果集的差集(或者说补集),显示第一个结果集存在的,第2个结果集不存在的数据

UNION ALL,与UNION相似,不同的是UNION ALL不会自动去处重复行,也不会以任何列排序

Ltrim,Rtrim,去除左右的不同字符串

以上个指令的具体用法去查资料,在此做个备忘

posted @ 2009-06-18 09:25 失忆的硬盘 阅读(30) | 评论 (0) |

2009年2月20日

从服务器上传和下载

 

==============================================

上传

==============================================            

            GetDb_IT myGetDb_IT = new GetDb_IT();
            SqlDataReader dr;
            string mysql = "";
            string DB_Path="";
            string path = "";
            DB_Path = "Document/" + Path.GetFileName(myFU.PostedFile.FileName);
            mysql = "select 路径 from 文档管理 where 项目号='" + Session["PNO"].ToString() + "'";
            dr = myGetDb_IT.GetDataReader(mysql);
            if (dr.Read())
            {
                path = Server.MapPath(DB_Path);
                myFU.PostedFile.SaveAs(path); //保存文件
                myLBL.Text = "上传成功!";
                mysql = "update 文档管理 set 路径='" + DB_Path + "',上传人='" + HttpUtility.UrlDecode(Request.Cookies["User"].Value).ToString().Trim()+"',上传时间='"+System.DateTime.Now.ToShortDateString()+"' where 项目号='"+Session["PNO"].ToString()+"'";
                myGetDb_IT.Update(mysql);
            }
            dr.Close();
            myGetDb_IT.close();

 

===============================================

下载

===============================================

            string fileName = HttpUtility.UrlEncode("aaaa.xls").ToString();
            string filePath = Server.MapPath(dr["路径"].ToString());//路径
            FileInfo fileInfo = new FileInfo(filePath);
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
            Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            Response.AddHeader("Content-Transfer-Encoding", "binary");
            Response.ContentType = "application/octet-stream";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            Response.WriteFile(fileInfo.FullName);
            Response.Flush();
            Response.End();

posted @ 2009-02-20 15:54 失忆的硬盘 阅读(20) | 评论 (0) |

2009年2月11日

推荐一个操作Zip文件的开源类库:DotNetZip (转)

 

DotNetZip 是一个短小易用的用来操作 zip 文件的 .NET 类库,支持.NET的任何语言,可很方便的创建,读取,和更新zip文件。而且还可以使用在.NETCompact Framework中。

下面是一些简单的例子:

1.加密压缩:

using (ZipFile zip = new ZipFile())
{
zip.Password = sPassword; //set pwd
zip.AddDirectory(sZipDir);
zip.Save(sSavePath + @"/" + sSaveName);
}

2.向压缩文件中添加:

using (ZipFile zip = new ZipFile("Backup.zip"))
{
zip.Password= "123456!";
zip.AddFile("ReadMe.txt");
zip.AddFile("7440-N49th.png");
zip.AddFile("2005_Annual_Report.pdf");
zip.Save();
}

3.解压缩到制定目录:

using (ZipFile zip = ZipFile.Read("D://test//2007.zip"))
{
foreach (ZipEntry e in zip)
{
Console.WriteLine("file name:{0}", e.FileName);
Console.WriteLine(e.Comment);
e.Extract("D://test//pwdata", true); // overwrite == true
}
}

 

其他详细的使用请参考:http://www.codeplex.com/DotNetZip

 

原文:http://www.cnblogs.com/carysun/archive/2009/02/11/dotnetzip.html

posted @ 2009-02-11 08:40 失忆的硬盘 阅读(27) | 评论 (0) |

2008年12月22日

在线劝说:7种说服人们网络购买的方法

 

说服不是什么高科技。它需要理解人性的各方面,这些方面通常是自动的或在人类潜意识层面工作。以下是7种说服人们的方法。

1.Show what others are doing 向人们展示其他人在做什么

人们观察他人,并经常模仿他人的行为,尤其是在一些他们不确定的事情上。这种心理现象被称为“社会证明”。人们会感觉安心,并且经常以他人的行为为基础进行决策。他们假设他人拥有更多的知识或者比他们自己知道得更多。

你能够通过以下方式增强在线社会证明:

-          展示最热门的条目。

-          展示“买了这些了顾客还买了哪些”。

-          展示最畅销的东西。

-          展示证明书或者奖状。

另外,人们会做那些他们所喜欢的人正在做的事。

2.Show user-generated reviews 提供用户评论

用户评论会对人们的购买决策产生巨大的影响。由于web 2.0和社会性媒体的快速成长,用户评论成为网站设计的必要组成部分。让你的用户在网站上写评论,让他们对产品和服务进行总体评级——毕竟,这些是你网站的免费内容。与营销人员相比,网络用户更愿意相信那些像他们一样的用户所说的话。对于旅游和电子产品网站来说,评论尤其重要。

人们通常需要查看用户评论,如果他们在你的网站上找不到评论,他们会到别处去看。在网络上没有任何东西可以隐藏起来,因为你必须将他们保存在你的网站上。Figleaves15和UK Apple store16在这方面就做得很好。

另外,不要害怕负面评论。用户在一英里之外就能闻得出来这个网站是否被“编辑”过,这会让他们不相信你说的任何话。你应该准备好对顾客的负面评论进行快速的反应,而不是删除。

3.Show scarcity of products 展示商品的稀缺性

稀缺产生需求,并鼓励人们更快地购买。人们想要那些他们认为他们不能拥有的东西,社会心理学表明,失去是一种比得到更强烈的感情。因此,一个失去100元的人所推动的满足感是一个侥幸获得100元的人所得到的满足感的2倍左右。

你能够通过展现以下的词语来表现稀缺:

-仅剩1星期

-只有两个库存

-最后清仓

-暂无商品,添加至期望清单

-此商品还剩2天4小时3分17秒售罄 (可用计时器)

Webcredible在它的网站上展示剩余培训课程的数量。该数量每日递减,只到这些课程都被预订出来。这样做给访问者一种紧迫的感觉,他们需要在这些课程都卖出去之间预订。关于决策的研究也表明,与人们从来没有拥有某样物件相比,当人们感觉他即将失去该物时,他会认为此物更有价值。

4. Persuade with pictures & videos 通过图片和视频来说服

在产品销售方面,尤其对高价值和奢侈性产品,图像是一种非常具有说服性的工具。因此,确保提供商品的高清晰图片。他让人们对其将要购买的产品放心大有帮助。

图片必须:

-拥有专业的质量

-提供不同的观察视角

-可放大的

-说服大小和使用场景

Oli17是一个卖衣服的网站,已经走在了前面。他们有一个15秒钟的视频片段,让模特们身穿他们的衣服,走着猫步,这让你对商品的外观拥有更好的感觉和感受。随着带宽的增长,这可能是一些网站未来的发展趋势。看视频比阅读所需要的努力少得多,并能够提供更丰富的体验。记得让用户能够选择,而不是在打开网站时,自动播放视频。

5. Cross- and up-sell 交叉销售和提升销售

那个建议“嘿,为什么我们不问顾客是否要点炸土豆条?”的人会变得更强。一旦人们决定要购买,说服他们买更多的东西将会变得容易,因为他们的一只脚已经踏进门里了。在网络上,这一原理仍然有效。

不要低估交叉销售和提升销售所带来的潜在利润。像在真实商店里一样,向用户展示相关商品和额外产品。这会使人们更快和更容易的购买更多商品。例如,浏览一下Ocado18上的百吉饼,他们仍然会在你付帐的时候向你展示奶油干酪。他们展示任何你可能错过的东西,一个说服你买更多东西的聪明策略。

6. Show authority 展示权威

权威原理表明,我们更容易被权威所说服。如果Tiger Woods对你的完全高尔夫教程提供一些建议,你更倾向于听他而不是你的同学Bob给出的同样建议。同样,展示权威和专家的网站更容易被相信。对于B2B网站来说,这更重要。

你可以通过以下方式展示权威:

-表明你是一个专家

-展示第三方网站的数据和链接

-参考政府和权威机构

-展示权威的符号和图片

7. Allay people's fears 缓和人们的担心情绪

如果我想退货怎么办?存在隐性的成本吗?这些是购物者可能有的一些担心情绪。你需要降低这种情绪如果你想说服人们和你做生意。提前、快速地回答人们这些顾虑能够对人们产生积极的影响,并减少他们的担心。

Conclusion 结论

简单来说,说服就是给你的用户提供做出适当选择时所需要的信息,帮助他们信任你并减轻他们的任何顾虑。它不是操纵。记住,这些说服策略只能做到如此——你的网站仍然需要提供好的服务。

posted @ 2008-12-22 14:52 失忆的硬盘 阅读(17) | 评论 (0) |

2008年9月8日

DataGrid实现自增列、单选、多选 (转载)

(1)实现自增列
只需要在前台添加一个模板列,绑定ItemIndex+1就可以了
 <asp:TemplateColumn HeaderText="选择">
 <ItemTemplate>
 <%# Container.ItemIndex+1%>       
 </ItemTemplate>
 </asp:TemplateColumn>
(2)实现单选
在上面的基础上,为这个列加一个radio
 <asp:TemplateColumn HeaderText="选择">
      <ItemTemplate>
       <%# Container.ItemIndex+1%>
       <input type=radio name="rad" value='<%# Container.ItemIndex+1%>'>
      </ItemTemplate>
     </asp:TemplateColumn>

radio的值也就是自增的1-PageSize
再创建一个按钮(名字叫单选),为之添加如下代码
this.Label1.Text = "选择的行号:" + Request.Form["rad"].ToString();
这样简单的几步虽然实现了显示选择的行号,但是在按下按钮以后,radio的选择是不能被保留的,原因是这个radio不是runat=server的,我们需要再为这个页面放置一个隐藏域(需runat=server)用来在点击按钮的时候保存选择的radio,在前台添加<input type="hidden" id="rd" runat="server" name="rd">(注意,不要把这个添加到DataGrid中),然后再在刚才那个按钮中添加rd.Value = Request.Form["rad"].ToString();(如果vs.net没有为这个HtmlInputHidden申明的话你自己加上protected System.Web.UI.HtmlControls.HtmlInputHidden rd;)。到现在为止还没有完成,虽然HtmlInputHidden里面已经保存了选择的行号,但是还需要在页面Load的时候让这个radio为选择状态,修改Page_Load()为
private void Page_Load(object sender, System.EventArgs e)
  {
   string js = "";
   js+="<script>/r/n";
   js+="function ld(){/r/n";
   js+="for(i=0;i<document.getElementsByName('rad').length;i++)/r/n";
   js+="if(document.getElementsByName('rad')[i].value==";
   js+="document.getElementById('" + this.rd.ClientID + "').value) ";
   js+="document.getElementsByName('rad')[i].checked=true/r/n";
   js+="}/r/n";
   js+="window.onload=ld/r/n";
   js+="</script>/r/n";
   this.RegisterStartupScript("js",js);
   if(!IsPostBack)
   {    
    SetBind();
   }
  }

下面分析一下以上的这段代码:

问:为什么不把代码放在 if(!IsPostBack)中呢?
答:放不放还需要明确 if(!IsPostBack)的意思(具体见
http://blog.csdn.net/lovecherry/archive/2005/02/25/301441.aspx中的说明),其实确切的说应该把这段代码放到 if(!IsPostBack){}else{放到这里}来,因为第一次加载页面的时候,隐藏域里面是不可能有东西的(第一次加载页面你都选择并且点击按钮提交,怎么会有东西呢?)

问:/r/n是什么东西?
答:这个是换行,放不放对代码运行没有影响,但是如果放了换行的话,在客户端的呈现可以更加清晰

问:为什么取rd的值要用document.getElementById('" + this.rd.ClientID + "').value不用document.getElementById('rd').value 呢?
答:其实在这里你可以后者,但是要知道一点,就是rd是服务端的控件,在某些情况下,id在客户端的呈现不是在aspx中你指定的id了,而是控件.ClientID,比如在DataGrid中放置的一些服务器端控件,查看一下源代码可以看到id是类似DataGrid1__ctl5_Hyperlink1而不是你指定的id了

问:这里为什么不用RegisterClientScriptBlock呢?
答:在这里,这也是无所谓的你可以使用RegisterClientScriptBlock,因为这段js是自运行的(js+="window.onload=ld/r/n";这句)的,所以不管在form的开始或是结束呈现都不会影响到结果

(3)实现多选
首先在前台加入如下的代码(添加一列)
 <asp:TemplateColumn>
      <ItemTemplate>
       <input type="hidden" id="SelectedID" runat="server"
    value='<%# Container.ItemIndex%>'  NAME="SelectedID"/>
       <asp:CheckBox ID="chkExport" Runat="server" />
      </ItemTemplate>
     </asp:TemplateColumn>

为页面加入一个按钮(名字叫多选),为之添加以下代码
foreach(DataGridItem di in this.DataGrid1.Items)
   {
    if(((CheckBox)di.FindControl("chkExport")).Checked==true)
    {
     this.Label1.Text+=this.DataGrid1.DataKeys[int.Parse(((HtmlInputHidden)di.FindControl("SelectedID")).Value)]+"<br>";
    }
   }

点击了这个按钮就在label的位置显示了所有选择的项目对应的数据表主键的值,可以利用这个值进行一些数据库的操作

比如:
string s="";
   foreach(DataGridItem di in this.DataGrid1.Items)
   {
    if(((CheckBox)di.FindControl("chkExport")).Checked==true)
    {
     s+=this.DataGrid1.DataKeys[int.Parse(((HtmlInputHidden)di.FindControl("SelectedID")).Value)]+",";
    }
   }
   SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
   SqlCommand comm=new SqlCommand("delete from tb1 where ID in (",conn);
   comm.CommandText+=s.Substring(0,s.Length-1)+")";//删除最后一个逗号
   conn.Open();   
   comm.ExecuteNonQuery();
   conn.Close();
   SetBind();

你可以再添加两个按钮,一个叫选择所有,一个叫取消所有选择,为之分别添加如下代码
foreach(DataGridItem di in this.DataGrid1.Items)
   {
        ((CheckBox)di.FindControl("chkExport")).Checked=true;
   }


foreach(DataGridItem di in this.DataGrid1.Items)
   {
     ((CheckBox)di.FindControl("chkExport")).Checked=false;
   }

下面分析以上上面的代码:

问:选择所有和取消所有选择的按钮是提交到服务器的,能否不提交实现?
答:首先明确,模板列中的checkbox是runat=server的,上面说了,在客户端的呈现id是类似DataGrid1__ctl9_chkExport这样的,所以在客户端js取的时候我们只能通过控件.ClientID来取,如果在Page_Load的时候来取的话是取不到的,因为checkbox是放在DataGrid模板列中的,在Page_Load的时候DataGrid还没有Created。解决办法就是同上面单选的一样,统一使用一个server端的隐藏域来保存多选的项目,然后替换模板列中的<asp:CheckBox>为html的checkbox,在选择时候来更改隐藏域中的值(通过js,所以不会提交页面),同样在点击多选按钮的时候,通过读取隐藏域中的值来得到选择的项目,这样其实是一个代码以服务端为主到客户端为主的一个转变,在有的时候服务端和客户端的交互通过隐藏域是非常方便的。在后续文章中会详细给出跨页面多选,同时也实现了客户端选择所有和取消所有选择的例子。

原创粉丝点击