转换为横排的问题
表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