日期:2014-05-18  浏览次数:20355 次

行变列(交叉表)查询语句的写法求助.
建立测试环境语句:
CREATE   TABLE   [TABLE1]   (
[iCode]   [int]     NOT   NULL,
[iDate]   [char]     (50)   NULL,
[State]   [char]     (50)   NULL)

ALTER   TABLE   [TABLE1]   WITH   NOCHECK   ADD     CONSTRAINT   [PK_TABLE1]   PRIMARY   KEY     NONCLUSTERED   (   [iCode]   )INSERT   [TABLE1]   ([iCode],[iDate],[State])   VALUES   (   1, '2007-8-9 ', '30 ')
INSERT   [TABLE1]   ([iCode],[iDate],[State])   VALUES   (   2, '2007-8-8 ', '60 ')
INSERT   [TABLE1]   ([iCode],[iDate],[State])   VALUES   (   3, '2007-2-3 ', '30 ')

CREATE   TABLE   [TABLE2]   (
[AutoNo]   [int]     IDENTITY   (1,   1)     NOT   NULL,
[iCode]   [int]     NULL,
[ItemName]   [char]     (100)   NULL,
[ItemValue]   [char]     (100)   NULL)

ALTER   TABLE   [TABLE2]   WITH   NOCHECK   ADD     CONSTRAINT   [PK_TABLE2]   PRIMARY   KEY     NONCLUSTERED   (   [AutoNo]   )SET   IDENTITY_INSERT   [TABLE2]   ON

INSERT   [TABLE2]   ([AutoNo],[iCode],[ItemName],[ItemValue])   VALUES   (   1,1, '用胶点 ', '发动机 ')
INSERT   [TABLE2]   ([AutoNo],[iCode],[ItemName],[ItemValue])   VALUES   (   2,1, '被粘材料 ', '内缸 ')
INSERT   [TABLE2]   ([AutoNo],[iCode],[ItemName],[ItemValue])   VALUES   (   3,1, '工作介质 ', '机油 ')
INSERT   [TABLE2]   ([AutoNo],[iCode],[ItemName],[ItemValue])   VALUES   (   4,1, '工作温度 ', '200 ')
INSERT   [TABLE2]   ([AutoNo],[iCode],[ItemName],[ItemValue])   VALUES   (   5,2, '用胶点 ', '螺纹封 ')
INSERT   [TABLE2]   ([AutoNo],[iCode],[ItemName],[ItemValue])   VALUES   (   6,2, '工作温度 ', '300 ')

SET   IDENTITY_INSERT   [TABLE2]   OFF
表一和表二是主从表的关系

现在想得到的查询结果:

iCode   |   iDate       |   State   |用胶点|   被粘材料   |工作介质   |工作温度
-------------------------
1           2007-8-9         30           发动机           内缸           机油             200
2           2007-8-8         60           螺纹封           null           null             300

------解决方案--------------------
select a.*
,max(case when b.ItemName = '用胶点 ' then ItemValue end) as 用胶点
,max(case when b.ItemName = '被粘材料 ' then ItemValue end) as 被粘材料
,max(case when b.ItemName = '工作介质 ' then ItemValue end) as 工作介质
,max(case when b.ItemName = '工作温度 ' then ItemValue end) as 工作温度

from TABLE1 a
join table2 b on b.iCode = a.iCode
group by a.icode,a.idate,a.state