交叉表问题....高手帮忙解决一下! 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 就可以了。但是这个表 要判断唯一性是通过两个字段。
另外 数据类型转换 也出现问题了。所以 跪球高手指教啊!!!
...全文
161 16 打赏 收藏 转发到动态 举报
写回复
用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,209

社区成员

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

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