关联两个表的行列转换

megin 2005-04-11 10:05:52
我的问题如下:

表1(T_MatlType)是存放物料的类型iMatlFamily、vCode
结构如下:
id int
iMatlFamily int
vCode varchar(50)

表2(T_MatlEnoughLev)结构如下:

id int
iAlertClass int
iMatlFamily int
iQty int

我现在将表2进行行列转换语句如下

DECLARE @sql varchar(8000)
SET @sql = 'select iAlertClass'
SELECT @sql = @sql + ' ,sum(case iMatlFamily when '''+cast(iMatlFamily as varchar(10))+''' then dDQtyPre end) ['+cast(iMatlFamily as varchar(10))+']'
FROM (SELECT DISTINCT iMatlFamily FROM T_MatlEnoughLev) AS a
SELECT @sql = @sql + ' from T_MatlEnoughLev group by iAlertClass'
EXEC (@sql)

查询结果:

iAlertClass 103 104 105 106 107
1 50 60 70 80 90
2 55 66 77 88 99

现在我想把查询结果中的103、104、105、106、107转换成为对应表1中的vCode,也就是我想得到如下的结果:

iAlertClass FA FB FC FD FE
1 50 60 70 80 90
2 55 66 77 88 99

该如何修改上面的语句?
...全文
172 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
megin 2005-04-11
  • 打赏
  • 举报
回复
感激不已!
zjcxc 元老 2005-04-11
  • 打赏
  • 举报
回复
@sql变量中使用的字段是T_MatlEnoughLev表的
要拼接到@sql变量中的字段应该使用T_MatlType表的
zjcxc 元老 2005-04-11
  • 打赏
  • 举报
回复
--结果:
iAlertClass FA FB
----------- ----------- -----------
1 100 NULL
2 NULL 90
zjcxc 元老 2005-04-11
  • 打赏
  • 举报
回复
create table T_MatlType(
id int,
iMatlFamily int,
vCode varchar(50))
insert T_MatlType select 1,1,'FA'
union all select 2,2,'FB'

create table T_MatlEnoughLev(
id int,
iAlertClass int,
iMatlFamily int,
dDQtyPre int)
insert T_MatlEnoughLev select 1,1,1,100
union all select 2,2,2,90
go

DECLARE @sql varchar(8000)
SET @sql = 'select iAlertClass'
SELECT @sql = @sql + ' ,sum(case iMatlFamily when '''+cast(id as varchar(10))+''' then dDQtyPre end) ['+vCode+']'
FROM T_MatlType WHERE id IN(SELECT DISTINCT iMatlFamily FROM T_MatlEnoughLev)
SELECT @sql = @sql + ' from T_MatlEnoughLev group by iAlertClass'
EXEC (@sql)
go

drop table T_MatlEnoughLev,T_MatlType
megin 2005-04-11
  • 打赏
  • 举报
回复
sorry,我没有表达好,是表1的id和表2的iMatlFamily字段关联的,不过我改成如下还不行:

DECLARE @sql varchar(8000)
SET @sql = 'select iAlertClass'
SELECT @sql = @sql + ' ,sum(case id when '''+cast(id as varchar(10))+''' then dDQtyPre end) ['+vCode+']'
FROM T_MatlType WHERE id IN(SELECT DISTINCT iMatlFamily FROM T_MatlEnoughLev)
SELECT @sql = @sql + ' from T_MatlEnoughLev group by iAlertClass'
EXEC (@sql)
zjcxc 元老 2005-04-11
  • 打赏
  • 举报
回复
iMatlFamily是两表关联的字段吧? 那应该没错啊
megin 2005-04-11
  • 打赏
  • 举报
回复
zjcxc(邹建) 老大,我试了你的语句,返回的的是:

iAlertClass FA FB FC FD FE
1 NULL NULL NULL NULL NULL
2 NULL NULL NULL NULL NULL

zjcxc 元老 2005-04-11
  • 打赏
  • 举报
回复
DECLARE @sql varchar(8000)
SET @sql = 'select iAlertClass'
SELECT @sql = @sql + ' ,sum(case iMatlFamily when '''+cast(iMatlFamily as varchar(10))+''' then dDQtyPre end) ['+vCode+']'
FROM T_MatlType WHERE iMatlFamily IN(SELECT DISTINCT iMatlFamily FROM T_MatlEnoughLev)
SELECT @sql = @sql + ' from T_MatlEnoughLev group by iAlertClass'
EXEC (@sql)
megin 2005-04-11
  • 打赏
  • 举报
回复
UP

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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