请SQL高手们帮忙看看这条语句该如何写?(50分)

  • 主题发起人 主题发起人 gxf1681
  • 开始时间 开始时间
G

gxf1681

Unregistered / Unconfirmed
GUEST, unregistred user!
请SQL高手们帮忙看看这条语句该如何写?<br>如下所示:(假设有 A 表)<br>   厂名   销售方式   销售重量(KG)  销售金额(USD)<br>&nbsp; &nbsp; &nbsp;A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;外销 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 12000<br>&nbsp; &nbsp; &nbsp;A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;内销 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;500 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;6000<br>&nbsp; &nbsp; &nbsp;A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;转厂 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;100 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;120<br>&nbsp; &nbsp; &nbsp;B &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;外销      800      10000<br>   B &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;内销      500      6000<br>现在想将如上表,进行行转列,显示效果如下所示:<br>厂名 外销(重量KG) 内销(重量KG) 转厂(重量KG) 外销(金额USD) 内销(金额USD) 转厂(金额USD)  <br>A &nbsp; &nbsp; 1000 &nbsp; &nbsp; 500 &nbsp; &nbsp; 100 &nbsp; 12000 &nbsp;6000 &nbsp;120 &nbsp;<br><br>请高手帮忙指点一下,如何用SQL语句比较简单实现该效果!!<br>  
 
用存贮过程吧,存贮过程就可以用简单的sql语句组合实现,这个需求没有办法使用一个简单的sql语句实现
 
的确可以用存储过程,不过那是在和名称有关的列值不能事先确定的情况下不得已采取的<br>办法,对于楼主的问题,似乎可以确定“销售方式”的可能取值——试试下面的语句吧:<br><br>SELECT<br>&nbsp; 厂名,<br>&nbsp; SUM(case 销售方式 when '外销' then 销售重量 else 0 end) AS [外销(重量KG)],<br>&nbsp; SUM(case 销售方式 when '内销' then 销售重量 else 0 end) AS [内销(重量KG)],<br>&nbsp; SUM(case 销售方式 when '转厂' then 销售重量 else 0 end) AS [转厂(重量KG)],<br>&nbsp; SUM(case 销售方式 when '外销' then 销售金额 else 0 end) AS [外销(金额USD)],<br>&nbsp; SUM(case 销售方式 when '内销' then 销售金额 else 0 end) AS [内销(金额USD)],<br>&nbsp; SUM(case 销售方式 when '转厂' then 销售金额 else 0 end) AS [转厂(金额USD)],<br>FROM A<br>GROUP BY 厂名
 
这个问题我以前也做过,主要为了报表的打印格式问题做的。我选择的方式不是在服务器端SQL中Select出来这种格式的结果(存储过程就能实现),我选择的方式是在客户端进行循环添加的方式。首先在数据库中建立一个临时表(临时表B),字段为<br>厂名 外销(重量KG) 内销(重量KG) 转厂(重量KG) 外销(金额USD) 内销(金额USD) 转厂(金额USD)<br>然后写两个select语句,一个是select * from A 表,另一个是select * from 临时表B<br>在客户端分别赋值给两个数据集A和B,然后用循环把数据集A的内容赋值给数据B(临时表B的结构),这样就可以实现界面上显示横排排列的内容,满足显示和打印的要求
 
非常谢谢creation-zy,根据你的提示,我已经想出更简洁的办法,如下:<br>declare @str varchar(8000) <br>declare @s varchar(8000)<br>set @str=''<br>set @s =''<br><br>select @s=@s+',重量'+销售方式+'=sum(case 销售方式 when '''+销售方式+''' then 重量 else 0 end),金额'+销售方式+'=sum(case 销售方式 when '''+销售方式+''' then 金额 else 0 end )' from(select distinct 销售方式 from A)aa<br>select @str='select 厂名 '+@s+' from A group by &nbsp;厂名 '<br>--print @str<br>exec(@str)<br><br>执行,即可得出想要的效果!谢谢各位!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
615
import
I
I
回复
0
查看
593
import
I
后退
顶部