交叉表问题....高手帮忙解决一下! HELP!HELP!HELP!HELP!HELP!HELP!HELP!

star1083 2007-08-11 05:09:44
HELP!HELP!HELP!

id 表示用户
visit 表示反问次数
goods 表示发生顺序
mame 表示发生 物品名称

id visit goods name
196 1 1 衣服
196 1 2 裤子
196 1 3 帽子
196 2 1 鞋
196 2 2 袜子
196 2 3 皮带
196 2 4 衣服
566 1 1 钢笔
566 2 1 啤酒
566 3 1 螺丝刀


变成下表

id visit goods1 goods2 goods3 goods4
196 1 衣服 裤子 帽子 NULL
196 2 鞋 袜子 皮带 衣服
566 1 钢笔 NULL NULL NULL
566 2 啤酒 NULL NULL NULL
566 3 螺丝刀 NULL NULL NULL


一般交叉表判断一个字段 group by 就可以了。但是这个表 要判断唯一性是通过两个字段。
另外 数据类型转换 也出现问题了。所以 跪球高手指教啊!!!
...全文
162 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
paoluo 2007-08-12
  • 打赏
  • 举报
回复
可以,加上As列名即可.
star1083 2007-08-11
  • 打赏
  • 举报
回复
是我自己的错。呵呵。不知道自动增加的 列 可以 给他命名么?

star1083 2007-08-11
  • 打赏
  • 举报
回复
不行出错了。。。报错是地一行的 1 ,,
但是不是哪个地方。。问题,我找不出来。。。一会慢慢看看。谢谢了哦
paoluo 2007-08-11
  • 打赏
  • 举报
回复
动态语句里,忘了转换类型了,修改为上面的代码.
paoluo 2007-08-11
  • 打赏
  • 举报
回复
--動態
declare @str varchar(1000)
set @str='select id,visit '
select @str=@str+',min(case when goods='''+ Cast(goods As Varchar) +''' then name else Null end) as goods'''+ Cast(goods As Varchar) +''''
from t group by goods
select @str=@str+' from t group by id,visit'
exec(@str)
star1083 2007-08-11
  • 打赏
  • 举报
回复
paoluo(一天到晚游泳的鱼)
虽然我没有写 动态的
我开始的时候用静态的写了一下。。也是遇到这个问题!
“varchar 值 cname else Null end) as '' 转换为数据类型为 int 的列时发生语法错误。”

googs 是INT 我把结构改成 VARCHAR 就可以了!!

谢谢 paoluo(一天到晚游泳的鱼) !和 fa_ge(鶴嘯九天)

谢谢你们了哦!
paoluo 2007-08-11
  • 打赏
  • 举报
回复
他開始的代碼有點筆誤,要用修正後的。
star1083 2007-08-11
  • 打赏
  • 举报
回复
我还不知道..我马上回家做一下.告诉你...fa_ge(鶴嘯九天) 现在下班了!
star1083 2007-08-11
  • 打赏
  • 举报
回复
重新发一下..刚刚的没有发清楚........

paoluo(一天到晚游泳的鱼) goods不是固定的哦....需要交叉查以后看谁 领的东西最多.

fa_ge(鶴嘯九天) 动态的还看不懂...呵呵!

谢谢楼上的兄弟了. 我看了.自己在试试....
paoluo 2007-08-11
  • 打赏
  • 举报
回复
star1083(),什麼意思?

代碼寫的有問題嗎?
paoluo 2007-08-11
  • 打赏
  • 举报
回复
或者

--動態
declare @str varchar(1000)
set @str='select id,visit '
select @str=@str+',min(case when goods='''+goods+''' then name else Null end) as '''+goods+''''
from t group by goods
select @str=@str+' from t group by id,visit'
exec(@str)
paoluo 2007-08-11
  • 打赏
  • 举报
回复
語句有兩處筆誤,幫你修改下。

--動態
declare @str varchar(1000)
set @str='select id,visit '
select @str=@str+',min(case when goods='''+goods+''' then name else '''' end) as '''+goods+''''
from t group by goods
select @str=@str+' from t group by id,visit'
exec(@str)
star1083 2007-08-11
  • 打赏
  • 举报
回复
id 表示用户
visit 表示反问次数
goods 表示发生顺序
mame 表示发生 物品名称

id visit goods name
196 1 1 衣服
196 1 2 裤子
196 1 3 帽子
196 2 1 鞋
196 2 2 袜子
196 2 3 皮带
196 2 4 衣服
566 1 1 钢笔
566 2 1 啤酒
566 3 1 螺丝刀


变成下表

id visit goods1 goods2 goods3 goods4
196 1 衣服 裤子 帽子 NULL
196 2 鞋 袜子 皮带 衣服
566 1 钢笔 NULL NULL NULL
566 2 啤酒 NULL NULL NULL
566 3 螺丝刀 NULL NULL NULL
fa_ge 2007-08-11
  • 打赏
  • 举报
回复
哈哈,我就喜歡寫靜態語句,格式漂亮

魚兄寫了,我就寫個動態的吧
fa_ge 2007-08-11
  • 打赏
  • 举报
回复

--動態
declare @str varchar(1000)
set @str='select id,visit '
select @str=@str+',min(case when goods='''+goods+''' then nane else '' end) as '''+goods+''''
from t group by goods
select @str=@str+' from t group by id,visit'
exec(@str)

paoluo 2007-08-11
  • 打赏
  • 举报
回复
--如果goods固定只有4個
Select
id,
visit,
Max(Case goods When 1 Then name Else Null End) As goods1,
Max(Case goods When 2 Then name Else Null End) As goods2,
Max(Case goods When 3 Then name Else Null End) As goods3,
Max(Case goods When 4 Then name Else Null End) As goods4
From

Group By
id,
visit

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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