我公司有相关的代码,明天发给你啊!
================================================================
此帖通过csdn小助手回复。
CSDN小助手是使用vb.net编写的CSDN论坛脱机“外挂”,她能够在
脱离IE的情况下使用Csdn论坛。程序只加载最核心的数据,所以显示更
快,产生的流量更小。 下载地址:http://qqwwee.com/csdn.rar
================================================================
================================================================
此帖通过csdn小助手回复。
CSDN小助手是使用vb.net编写的CSDN论坛脱机“外挂”,她能够在
脱离IE的情况下使用Csdn论坛。程序只加载最核心的数据,所以显示更
快,产生的流量更小。 下载地址:http://qqwwee.com/csdn.rar
================================================================
解决方案 »
- 求 Sybase 导入 MS SQL Server 的语句
- sql语句 能否区分一列的值,进行统计记录条数
- 列装行后如何将结果放入一个表里
- 子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
- 求助
- 如何把winword文件填入vfp的数据表中啊???急
- 那里可以找到有关数据库的文章
- 海阔天空 兄: 能给一个创建job 并 使这个job 在每天12.00点 完全备份数据库的例子吗?
- 签到系统未到人的选择(在线等,正确结帖)
- 在SQL7中的smalldatetime数据类型问题?
- 关于SQL备份存储过程问题,向高手请教
- 求一SQL语句,有点难度,希望高手来看看,谢谢!
Create Table Drug(DrugName Nvarchar(10),DrugCode Nvarchar(10))
Insert Drug Select N'西药费','a'
Union All Select N'中药费','b'
Union All Select N'草药费','c'Create table DrugFare(PersonName Nvarchar(10),DrugFare Numeric(10,1),DrugCode Nvarchar(10))
Insert DrugFare Select N'张三',50.0, 'a'
Union All Select N'张三',100.0,'b'
Union All Select N'李四',60.0 ,'a'
GO
--测试
Declare @S Nvarchar(4000)
Set @S='Select A.DrugName '
Select @S=@S+',SUM(Case When B.PersonName=N'''+PersonName +''' Then DrugFare Else 0 End ) As '+ PersonName
from (Select Distinct PersonName from DrugFare) A
Select @S=@S+' from Drug A Left Join DrugFare B On A.DrugCode=B.DrugCode Group By A.DrugName'
EXEC(@S)
--删除测试环境
Drop Table Drug,DrugFare
--结果
/*
DrugName 张三 李四
中药费 100.0 .0
草药费 .0 .0
西药费 50.0 60.0
*/
================================================================
此帖通过csdn小助手回复。
CSDN小助手是使用vb.net编写的CSDN论坛脱机“外挂”,她能够在
脱离IE的情况下使用Csdn论坛。程序只加载最核心的数据,所以显示更
快,产生的流量更小。 下载地址:http://qqwwee.com/csdn.rar
================================================================
SELECT DrugName,SUM(case when PersonName='张三' then DrugFare esle 0000.00 end) 张三,SUM(case when PersonName='李四'then DrugFare else 0000.00 end) 李四 from
(SELECT qq2.*,qq1.DrugName FROM qq2 RIGHT JOIN qq1 ON qq1.DrugCode=qq2.DrugCode) b GROUP BY DrugName
再加動態語句
if object_id('tab_1') is not null drop table tab_1
go
create table tab_1(id int, name varchar(10), value int, content varchar(10))
insert tab_1 select 1, 'ss', 8, null
union all select 1, 'dd', 9, 'aaa'
union all select 1, 'ff', 10, null
union all select 1, 'ss', 9, 'bb'
union all select 2, 'dd', 8, null
union all select 2, 'ee', 10, 'cc'
--创建用户自定义函数
if object_id('fun_vcontent') is not null drop function dbo.fun_vcontent
go
create function fun_vcontent( @id int, @name varchar(10))
returns varchar(100)
as
begin
declare @str varchar(100)
set @str=''
select @str=@str+','+convert(varchar(10), value)+coalesce('('+content+')'
, '')
from tab_1
where id=@id and name=@name set @str=stuff(@str, 1, 1, '')
return @str
end
go
--中间结果
select t1.id, t1.name, t2.vcontent
from (select *
from (select distinct name from tab_1)t11,
(select distinct id from tab_1)t12) t1 left join
(select distinct id,name, dbo.fun_vcontent(id, name) as vcontent
from tab_1) t2 on t1.name=t2.name and t1.id=t2.id
order by t1.id, t1.name
我用的paoluo(一天到晚游泳的鱼) 方法可以实现
但有新问题来了
因为数据库中的记录太多,这样的话那个动态sql语句长度超过了8000,sql语句别自动截取了
请问这种情况怎么解决??
但有新问题来了
因为数据库中的记录太多,这样的话那个动态sql语句长度超过了8000,sql语句别自动截取了
请问这种情况怎么解决??新问题开的帖子:
http://community.csdn.net/Expert/topic/4143/4143434.xml?temp=.6065332thanks!
EXEC(@S1+@S2+@S3+@S4+@S5)
来执行.
DrugName 张三 李四 ...
西药费 50.0 60.0 ...
写在同一行。 我想用一条SQL 语句实现起来是很难的!
Create Table Drug(DrugName Nvarchar(10),DrugCode Nvarchar(10))
Insert Drug Select N'西药费','a'
Union All Select N'中药费','b'
Union All Select N'草药费','c'Create table DrugFare(PersonName Nvarchar(10),DrugFare Numeric(10,1),DrugCode Nvarchar(10))
Insert DrugFare Select N'张三',50.0, 'a'
Union All Select N'张三',100.0,'b'
Union All Select N'李四',60.0 ,'a'
GO--处理
DECLARE @sqlhead nvarchar(4000),@sqlend nvarchar(4000)
,@sql1 nvarchar(4000),@sql2 nvarchar(4000),@sql3 nvarchar(4000),@sql4 nvarchar(4000)
,@i int,@ic nvarchar(10)--生成数据处理临时表
SELECT id=IDENTITY(int,0,1),
g=0,
a=CAST(',SUM(Case When B.PersonName=N'''+PersonName +''' Then DrugFare Else 0 End ) As '+ PersonName
as nvarchar(4000))
INTO # FROM(
Select Distinct PersonName from DrugFare)a--分组临时表
UPDATE a SET @i=id/i,g=@i
FROM # a,(SELECT i=3800/MAX(LEN(a)) FROM #)b
SET @ic=@i--生成数据处理语句
SELECT
@sqlhead=N''''
+REPLACE(N'Select A.DrugName',N'''',N'''''')
+'''',
@sqlend=N''''
+REPLACE(N' from Drug A Left Join DrugFare B On A.DrugCode=B.DrugCode Group By A.DrugName',N'''',N'''''')
+N'''',
@sql1=N'',@sql2=N'',@sql3=N'',@sql4=N''
WHILE @ic>=0
SELECT
@sql1=N',@'+@ic+N' nvarchar(4000)'+@sql1,
@sql2=N',@'+@ic+N'=N'''''+@sql2,
@sql3=N',@'+@ic
+N'=CASE g WHEN '+@ic
+N' THEN @'+@ic+N'+a ELSE @'+@ic
+N' END'+@sql3,
@sql4=N'+@'+@ic+@sql4,
@ic=@ic-1
SELECT
@sql1=STUFF(@sql1,1,1,N''),
@sql2=STUFF(@sql2,1,1,N''),
@sql3=STUFF(@sql3,1,1,N''),
@sql4=STUFF(@sql4,1,1,N'')--执行
EXEC(N'DECLARE '+@sql1+N'
SELECT '+@sql2+N'
SELECT '+@sql3+N' FROM #
EXEC(N'+@sqlhead+N'+'+@sql4+N'+N'+@sqlend+N')')
--删除临时表
DROP TABLE #
GO--删除测试环境
Drop Table Drug,DrugFare