还是上次SQL语句,有些bug,不会修改了,坐等啊!!!这破脑子。。

generhappy 2012-07-18 03:00:14
连建表带查询的语句如下:

CREATE TABLE #a(P_Code nvarchar(20))
INSERT #a SELECT 'A01'
UNION ALL SELECT 'A02'
UNION ALL SELECT 'B01'
UNION ALL SELECT 'B02'

CREATE TABLE #b(Con_Code nvarchar(20),Con_Name nvarchar(20))
INSERT #b SELECT 'W01','一号柜'
UNION ALL SELECT 'W02','二号柜'
UNION ALL SELECT 'W03','三号柜'

CREATE TABLE #c(Con_Code nvarchar(20),P_Code nvarchar(20),P_Num int)
INSERT #c SELECT 'W01','A01',10
UNION ALL SELECT 'W01','A02',20
UNION ALL SELECT 'W02','B01',30
UNION ALL SELECT 'W03','B02',40
UNION ALL SELECT 'W03','A01',100

DECLARE @case nvarchar(2000)
DECLARE @sql nvarchar(4000)
SELECT @case=ISNULL(@case,'')+'CASE Con_Name WHEN '''+Con_Name+''' THEN P_Num ELSE 0 END ['+Con_Name+'],' FROM #b ORDER BY Con_Code
PRINT @case
SET @case=SUBSTRING(@case,1,LEN(@case)-1)
SET @sql='SELECT P_Code,'+@case+' FROM (SELECT a.P_Code,c.P_Num,Con_Name FROM #c c INNER JOIN #a a ON c.P_Code=a.P_Code INNER JOIN #b b ON c.Con_Code=b.Con_Code)t'
EXEC(@sql)


现在这样的查询结果为:
P_Code 一号柜 二号柜 三号柜
A01 10 0 0
A02 20 0 0
B01 0 30 0
B02 0 0 40
A01 0 0 100

我想得到结果如下:

P_Code 一号柜 二号柜 三号柜
A01 10 0 100
A02 20 0 0
B01 0 30 0
B02 0 0 40
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
timfeng2009 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

求解释 sql建立临时表改怎么保存?
[/Quote]
自动保存到SQLSERVER里面,具体的位置没去了解过。生命周期是依赖于连接。连接结束,临时表的生命周期结束。
阿拉敏敏 2012-07-18
  • 打赏
  • 举报
回复
求解释 sql建立临时表改怎么保存?
xuan.ye 2012-07-18
  • 打赏
  • 举报
回复
改进一下:
declare @sql nvarchar(4000)
set @sql='Select P_Code '
Select @sql=@sql+',sum(case when Con_Code='''+#b.Con_Code+ ''' then P_Num else 0 end) As '''+Con_Name+''''
From #c INNER JOIN #B on #c.Con_Code=#b.Con_Code Group By #b.Con_Code,#b.Con_Name
Print @sql
set @sql=@sql+' From #c Group By P_Code'
Print @sql
execute sp_executesql @sql

全栈极简 2012-07-18
  • 打赏
  • 举报
回复
楼主离成功只差一步。
在你之前的基础之上,只要再建个临时表,把上面的结果插入进去,然后再select出来,group by p_code就可以了,很好的。
huangwenquan123 2012-07-18
  • 打赏
  • 举报
回复

declare @sql varchar(1000)
set @sql='select c.P_Code'
select @sql=@sql+',max(case Con_Name when '''+[Con_Name]+''' then P_Num else 0 end) ['+[Con_Name]+']'
from #b b inner join #c c on b.Con_Code=c.Con_Code group by [Con_Name]
set @sql=@sql+'from #c c inner join #a a on c.P_Code=a.P_Code inner join #b b on c.Con_Code=b.Con_Code group by c.P_Code'
exec(@sql)
/*
P_Code 二号柜 三号柜 一号柜
A01 0 100 10
A02 0 0 20
B01 30 0 0
B02 0 40 0
*/
laowang134 2012-07-18
  • 打赏
  • 举报
回复

--在case上加上sum,最后聚合一下就行了
DECLARE @case nvarchar(2000)
DECLARE @sql nvarchar(4000)
SELECT @case=ISNULL(@case,'')+'SUM(CASE Con_Name WHEN '''+Con_Name+''' THEN P_Num ELSE 0 END) ['+Con_Name+'],' FROM #b ORDER BY Con_Code
SET @case=SUBSTRING(@case,1,LEN(@case)-1)
SET @sql='SELECT P_Code,'+@case+' FROM (SELECT a.P_Code,c.P_Num,Con_Name FROM #c c INNER JOIN #a a ON c.P_Code=a.P_Code INNER JOIN #b b ON c.Con_Code=b.Con_Code)t GROUP BY P_Code'
EXEC(@sql)
/*
P_Code 一号柜 二号柜 三号柜
-------------------- ----------- ----------- -----------
A01 10 0 100
A02 20 0 0
B01 0 30 0
B02 0 0 40

(4 行受影响)
*/
xuan.ye 2012-07-18
  • 打赏
  • 举报
回复
试试这个

declare @sql nvarchar(4000)
set @sql='Select P_Code '
Select @sql=@sql+',sum(case when Con_Code='''+Con_Code+ ''' then P_Num else 0 end) As '''+Con_Code+''''
From #c Group By Con_Code
Print @sql
set @sql=@sql+' From #c Group By P_Code'
Print @sql
execute sp_executesql @sql

62,040

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧