想了二三天的SQL問題,答出送完我的分 ( 积分: 100 )

  • 主题发起人 主题发起人 masterKingmark
  • 开始时间 开始时间
支持dcx0026的算法,在SQL語句中調用這個函數就行了(好像表2裡面只要采購單號一樣就行了,沒有客戶名稱吧)<br>select&nbsp;采購單號,客戶名稱,dbo.sumStr(采購單號,客戶名稱)&nbsp;as&nbsp;銷售單號&nbsp;from&nbsp;Table1
 
select&nbsp;A.采購單號,A.客戶名稱,B.銷售單號&nbsp;from&nbsp;A,B&nbsp;where&nbsp;A.采購單號=B.采購單號<br>沒有試過。自己試試
 
select&nbsp;distinct(b.采購單號).a.*&nbsp;from&nbsp;TABLE1&nbsp;a&nbsp;left&nbsp;out&nbsp;join&nbsp;table2&nbsp;b&nbsp;on&nbsp;b.采購單號=a.采購單號&nbsp;group&nbsp;by&nbsp;b.采購單號<br><br>你看这样可以否
 
这个分给我吧<br>最好的办法是用函数,上面已经有人写了一个,但是太麻烦<br>CREATE&nbsp;function&nbsp;GetXSDH(@CGDH&nbsp;varchar(50))<br>returns&nbsp;varchar(8000)<br>as<br>begin<br>declare&nbsp;@str&nbsp;varchar(8000)<br>declare&nbsp;@i&nbsp;int<br>set&nbsp;@str=''<br>set&nbsp;@i=0<br>select&nbsp;&nbsp;@i=&nbsp;count(*)&nbsp;&nbsp;from&nbsp;TABLE2&nbsp;where&nbsp;&nbsp;采购编号=@CGDH&nbsp;<br>if&nbsp;@i&gt;=1&nbsp;&nbsp;<br>begin<br>&nbsp;&nbsp;select&nbsp;@str=@str+','+&nbsp;销售单号&nbsp;from&nbsp;TABLE2&nbsp;where&nbsp;&nbsp;采购编号=@CGDH&nbsp;<br>&nbsp;&nbsp;set&nbsp;@str=right(@str,len(@str)-1)<br>end<br>return(@str)<br>End<br><br>应用<br>select&nbsp;采購單號&nbsp;,客戶名稱,dbo.GetXSDH(采購單號)&nbsp;as&nbsp;銷售單號&nbsp;from&nbsp;TABLE1<br><br>拿分来!!!!
 
use&nbsp;db<br>go<br>create&nbsp;table&nbsp;table1(采購單號&nbsp;varchar(20),客戶名稱&nbsp;nvarchar(20))<br>insert&nbsp;table1&nbsp;values('A20070101',N'張先生')<br>insert&nbsp;table1&nbsp;values('A20070102',N'林先生')<br><br>create&nbsp;table&nbsp;table2(&nbsp;銷售單號&nbsp;varchar(20),采購單號&nbsp;varchar(20))<br>insert&nbsp;table2&nbsp;values('B20070201','A20070101')<br>insert&nbsp;table2&nbsp;values('B20071218','A20070101')<br><br>Create&nbsp;function&nbsp;F_Multiply(@po&nbsp;varchar(10))<br>returns&nbsp;varchar(255)<br>as<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;declare&nbsp;@ret&nbsp;varchar(255)<br>&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;@ret=''<br>&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;@ret=@ret+銷售單號+','&nbsp;from&nbsp;table2&nbsp;where&nbsp;采購單號=@po&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;@ret&lt;&gt;''&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;@ret=substring(@ret,1,len(@ret)-1)--去掉最后末尾的逗号<br>&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;@ret<br>end<br>go<br><br>select&nbsp;采購單號,客戶名稱,dbo.F_Multiply(采購單號)&nbsp;as&nbsp;銷售單號&nbsp;from&nbsp;table1<br>--这就返回你要的结果了
 
这个函数不错,学习了,呵呵
 
我用一个SQL语句实现过。我现在没有办法验证,贴上我的代码,你照猫画虎,试试吧<br><br>select&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSEMBLY_ID,WALL_THICKNESS,ltrim(max(sys_connect_by_path(gr,',')),',')&nbsp;GRADE&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select&nbsp;wid,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gr,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wid+(row_number()&nbsp;over(order&nbsp;by&nbsp;wid))&nbsp;node_id,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row_number()&nbsp;over(partition&nbsp;by&nbsp;wid&nbsp;order&nbsp;by&nbsp;wid)&nbsp;rn,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSEMBLY_ID,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WALL_THICKNESS&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select&nbsp;distinct&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cac.OD_MAX&nbsp;wid,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cac.GRADE&nbsp;gr,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cac.ASSEMBLY_ID,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cac.WALL_THICKNESS<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;cd_assembly_comp&nbsp;cac&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;join&nbsp;cd_assembly&nbsp;ca<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;cac.assembly_id=ca.assembly_id&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;join&nbsp;cd_well_source&nbsp;cws&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;&nbsp;ca.WELL_ID=cws.well_id&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;join&nbsp;cd_wellbore_t&nbsp;cwt<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;cwt.well_id=cws.well_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;cac.SECT_TYPE_CODE='CAS'&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;cwt.well_legal_name='YS2井筒#1'&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;ca.ASSEMBLY_NAME&nbsp;like&nbsp;'%表层套管%'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;with&nbsp;rn&nbsp;=&nbsp;1<br>&nbsp;&nbsp;&nbsp;&nbsp;connect&nbsp;by&nbsp;node_id-1&nbsp;=&nbsp;prior&nbsp;node_id<br>&nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;by&nbsp;wid,WALL_THICKNESS,ASSEMBLY_ID<br>&nbsp;&nbsp;&nbsp;&nbsp;order&nbsp;by&nbsp;wid
 
路过,学习
 
weichao9999正解<br>这样的问题用函数比较方便些
 
yitang<br>的函数真的不错,值得给分
 
这里:<br>http://blog.csdn.net/sysbug/archive/2006/11/29/1420050.aspx
 
這一個問題用存儲過程,搞定啦!!
 
這樣。。。我把我的分。。給大家吧
 
多人接受答案了。
 
有眼不识泰山
 
后退
顶部