一个SQL语句问题(有点难度)100分请教

acys 2003-08-30 09:02:55
我有一个表:项目编号,项目名称,专家编号,专家名称,打分
第一个项目都有10个专家打分,我想查询出这种效果或用这种格式打印!:
项目编号 项目名称 专家1,专家2,专家3。。。。。。专家10
...全文
48 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
IORILI 2003-09-09
  • 打赏
  • 举报
回复
强烈建议修改表结构,容易实现
acys 2003-09-09
  • 打赏
  • 举报
回复
这个临时表怎么建,要实例 做出有分
newnewworm 2003-09-08
  • 打赏
  • 举报
回复
建议使用临时表!
acys 2003-09-08
  • 打赏
  • 举报
回复
交叉怎么做啊
werewolf1012 2003-09-02
  • 打赏
  • 举报
回复
不知道我还有没有份
用交叉查询发能解决
xjljm 2003-09-02
  • 打赏
  • 举报
回复
原来是这样的?明白了!
thomas1911 2003-09-01
  • 打赏
  • 举报
回复
我觉得 lyguo(初学者) 的办法不错,可以试试看。

但是 xiufengy(石破天) 的代码实在是太长了,。 看起来比较吃力,最好解释一下。:-)))

还有我觉得既然一个项目需要10个专家打分 这个数据库的表结构就有点不合适。
hmily1688 2003-09-01
  • 打赏
  • 举报
回复
强烈建议用临时表,我也是这么搞定的
xiufengy 2003-09-01
  • 打赏
  • 举报
回复
参考一下
可以qq:28118085
CREATE proc dbo.PL_Jidu2
@S1 varchar(555)='',
@S0 varchar(555)='',
@D0 varchar(555)='',
@P0 varchar(555)='',
@T0 varchar(1)=''
as
set nocount on
declare @KB datetime
declare @KE datetime
declare @max int
declare @sqlstr nvarchar(2000)
declare @T nvarchar(1000)
declare @s int
declare @thisday varchar(15)
declare @p varchar(10)
declare @LB varchar(10)

select @max=max(T_ID) from Temp_JiDu
set @sqlstr=' create table ##rs(Chr_CarNum nvarchar(12),Chr_CarType nvarchar(4), '
set @s=1
while @s<=@max
begin
select @thisday=Chr_AllDate from Temp_JiDu where T_ID=@s
if @s=@max
set @sqlstr=@sqlstr + @thisday + ' varchar(15) DEFAULT ('+''''+'未交'+''''+') )'
else
set @sqlstr=@sqlstr + @thisday + ' varchar(15) DEFAULT ('+''''+'未交'+''''+'),'
set @s=@s+1
end
exec(@sqlstr)
Set @Sqlstr='insert into ##rs
(Chr_CarNum,Chr_CarType)
SELECT Chr_CarNum, Chr_CarType
FROM (SELECT DISTINCT Car_Base.Chr_CarNum, Car_Base.Chr_CarType
FROM Car_Base INNER JOIN
Car_Jiance ON Car_Jiance.Chr_CarNum = Car_Base.Chr_CarNum AND
Car_Jiance.Chr_CarType = Car_Base.Chr_CarType )
DERIVEDTBL'
exec(@sqlstr)
set @s=1
while @s<=@max
begin
select @thisday=Chr_AllDate,@kb=Date_One,@ke=Date_Two,@Lb=Chr_LeiBie from Temp_JiDu where T_ID=@s
set @p=
substring(@thisday,2,4)+'-'+substring(@thisday,6,2)+'-'+substring(@thisday,8,2)
set @sqlstr='update ##rs set '+@thisday+' =convert(Varchar(10),B.['+@Lb+'],121) from Car_Jiance B where (##rs.[Chr_CarNum]=B.[Chr_CarNum]) and (##rs.[Chr_CarType]=B.[Chr_CarType])
and (B.['+@Lb+'] Between '+''''+ convert(Varchar(10),@kb,121)+''''+' and '+ ''''+convert(Varchar(10),@ke,121)+''''+')'
exec(@sqlstr)
set @s=@s+1
end
set @sqlstr=' SELECT '+@S0
set @t=+' And ('
set @s=1
while @s<=@max
begin
select @thisday=Chr_AllDate from Temp_JiDu where T_ID=@s
if @s=@max
set @sqlstr=@sqlstr +' ##rs.'+@thisday+' '
else
set @sqlstr=@sqlstr +' ##rs.'+@thisday+' ,'
if @s=1
set @T=@T+'##rs.'+@thisday+'='+''''+'未交'+''''
else
set @T=@T+'or ##rs.'+@thisday+'='+''''+'未交'+''''
set @s=@s+1
End
if @t0='1'
set @t=''
else
set @t=@t+') '
Set @sqlstr=@sqlstr+@S1+' FROM ##rs INNER JOIN
Car_Base ON ##rs.Chr_CarNum = Car_Base.Chr_CarNum AND
##rs.Chr_CarType = Car_Base.Chr_CarType '
+@P0+@T+
' ORDER BY '+@D0
Print(@sqlstr)
exec(@sqlstr)
drop table ##rs
GO
Elysium 2003-09-01
  • 打赏
  • 举报
回复
select a.项目编号,a.项目名称,b.专家,b.打分,c.专家,c.打分 from table a,(select 专家 from table where 项目编号= '01') b .............
lyguo 2003-09-01
  • 打赏
  • 举报
回复
不过做迪卡尔积,如果数据量大的化会比较慢的。
lyguo 2003-09-01
  • 打赏
  • 举报
回复
或者做九次迪卡尔积
也就是

select
from old as x,old as y, old as z.................九个。//old为原库
where x.项目编号=y,项目编号 and y.项目编号=z.项目编号 and ........九个。
。。。。。。。。。。。。。。。。
。。。。。。。。。。。。
wjwboy 2003-08-30
  • 打赏
  • 举报
回复
你把你的数据-->excel 文件,发到我的信箱(wjwboy2000@163.com)里,我给做!!
SuperSeventh 2003-08-30
  • 打赏
  • 举报
回复
用存储过程解决可以。
lyguo 2003-08-30
  • 打赏
  • 举报
回复
再输出就可以了
select .
from tmp
to print
lyguo 2003-08-30
  • 打赏
  • 举报
回复
用SQL命令不好解决,这样吧,用一段程序解决吧。
先建一个临时库tmp结构为:项目编号 项目名称 专家1,专家2,专家3。。。。。。专家10
然后
insert into tmp(项目编号,项目名称 )
select 项目编号,项目名称 (distinct 项目编号)
from old //原来的库
然后再用循环来补充各个专家的打分
while(not eof(old))
if 专家名称=专家1
update tmp 专家1=old.打分。
where old.项目编号=tmp.项目编号
else if 专家名称=专家2
update tmp 专家2=old.打分。
where old.项目编号=tmp.项目编号
..................
................
enfif
你试试行不?
chl_ccssddnn 2003-08-30
  • 打赏
  • 举报
回复
好好考虑数据库结构设计,或许可以改变
nnfish 2003-08-30
  • 打赏
  • 举报
回复
表:项目编号,项目名称,专家编号,专家名称,打分

??
这样设计表结构,,好像不大好哩,,呵呵,,

对写程序不好的影响
chenjiong 2003-08-30
  • 打赏
  • 举报
回复
sql实现比较麻烦,可能效率不会很高。
我用report machine 实现过类似的报表,应该也是能实现你这个的,不过是个收费的组件。


capoatguitar 2003-08-30
  • 打赏
  • 举报
回复
如果只有一个项目的话,以你的意思是不是应该在表里保存10条记录,每条分别对应一个专家,如果有两个项目就应该有20条记录
加载更多回复(2)

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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