首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

转换为横排的有关问题

2012-02-03 
转换为横排的问题表1:类型货号类型名称1SD1001A12SD1001A23SD1001A34SD1001A45SD1001A56SD1001A6.........

转换为横排的问题
表1:
类型货号类型名称
1SD1001A1
2SD1001A2
3SD1001A3
4SD1001A4
5SD1001A5
6SD1001A6
...             ...             ...

表2:

货号123456
SD1001A1A2A3A4A5A6
.....................

要求表1变成表2,求SQL语句。我用类试的实现不了

select   b.货号,  
(case   b.类型   when   '1 '   then   'A1 '   end)   as   1,
(case   b.类型   when   '2 '   then   'A2 '   end)   as   2  
 
from   goodbase   b

[解决办法]
参考案例

create table tb(名稱 varchar(10),數量 numeric(10),類型 varchar(5))
Insert into tb
select 'L001 ', '1 ', 'A '
union all select 'L001 ', '2 ', 'B '
union all select 'L002 ', '5 ', 'C '
union all select 'L003 ', '6 ', 'D '
union all select 'L004 ', '9 ', 'A '
union all select 'L004 ', '5 ', 'D '

select * from tb

declare @sql varchar(1000)
set @sql= ' '
select @sql=@sql+ ',[ '+max(類型)+ ']=sum(case 類型 when ' ' '+max(類型)+ ' ' ' then 數量 else 0 end) '
from tb group by 類型
print @sql

exec( 'select 名稱 '+@sql+ ' from tb group by 名稱 ')
--結果
名稱 A B C D
---------------------------------------
L0011200
L0020050
L0030006
L0049005



[解决办法]
select b.货号,
max(case b.类型 when '1 ' then 'A1 ' end) as 1,
max(case b.类型 when '2 ' then 'A2 ' end) as 2

from goodbase b group by b.货号

[解决办法]
你差的就是group by b.货号

[解决办法]
select 货号,min(case when 类型名称= 'A1 ' THEN 'A1 ' END)AS '1 ',
min(case when 类型名称= 'A2 ' THEN 'A2 ' END)AS '2 ',
min(case when 类型名称= 'A3 ' THEN 'A3 ' END)AS '3 ',
min(case when 类型名称= 'A4 ' THEN 'A4 ' END)AS '4 ',
min(case when 类型名称= 'A5 ' THEN 'A5 ' END)AS '5 ',
min(case when 类型名称= 'A6 ' THEN 'A6 ' END)AS '6 '
FROM t
GROUP BY 货号
货号 1 2 3 4 5 6
---------- ---- ---- ---- ---- ---- ----
SD1001 A1 A2 A3 A4 A5 A6

(所影响的行数为 1 行)

警告: 聚合或其它 SET 操作消除了空值。

[解决办法]

CREATE TABLE tb
(
类型 INT,
货号 CHAR(6),
类型名称 CHAR(2)
)
INSERT INTO tb
SELECT 1, 'SD1001 ', 'A1 ' UNION ALL
SELECT 2, 'SD1001 ', 'A2 ' UNION ALL
SELECT 3, 'SD1001 ', 'A3 ' UNION ALL
SELECT 4, 'SD1001 ', 'A4 ' UNION ALL
SELECT 5, 'SD1001 ', 'A5 ' UNION ALL
SELECT 6, 'SD1001 ', 'A6 '
GO
DECLARE @S VARCHAR(500)
SET @S= 'SELECT 货号 '
SELECT @S=@S+ ',MAX(CASE 类型 WHEN '+CAST(类型 AS VARCHAR)+ ' THEN 类型名称 END) AS COL '+CAST(类型 AS VARCHAR) FROM


(
SELECT DISTINCT 类型 FROM tb
) A
SET @S=
CREATE TABLE tb
(
类型 INT,
货号 CHAR(6),
类型名称 CHAR(2)
)
INSERT INTO tb
SELECT 1, 'SD1001 ', 'A1 ' UNION ALL
SELECT 2, 'SD1001 ', 'A2 ' UNION ALL
SELECT 3, 'SD1001 ', 'A3 ' UNION ALL
SELECT 4, 'SD1001 ', 'A4 ' UNION ALL
SELECT 5, 'SD1001 ', 'A5 ' UNION ALL
SELECT 6, 'SD1001 ', 'A6 '
GO
DECLARE @S VARCHAR(500)
SET @S= 'SELECT 货号 '
SELECT @S=@S+ ',MAX(CASE 类型 WHEN '+CAST(类型 AS VARCHAR)+ ' THEN 类型名称 END) AS COL '+CAST(类型 AS VARCHAR) FROM
(
SELECT DISTINCT 类型 FROM tb
) A
SET @S=@S + ' FROM tb GROUP BY 货号 '
exec(@S)
--结果
货号 COL1 COL2 COL3 COL4 COL5 COL6
------ ---- ---- ---- ---- ---- ----
SD1001 A1 A2 A3 A4 A5 A6@S + ' FROM tb GROUP BY 货号 '
exec(@S)
--结果
货号 COL1 COL2 COL3 COL4 COL5 COL6
------ ---- ---- ---- ---- ---- ----
SD1001 A1 A2 A3 A4 A5 A6

热点排行