22,207
社区成员
发帖
与我相关
我的任务
分享
create table #tb(A1 varchar(20), B1 VARCHAR(10) , C1 VARCHAR(10),D1 VARCHAR(10))
insert into #tb values('Fitemid','3002','2980','75C')
insert into #tb values('5504014','0.48','0.25','0.01')
insert into #tb values('5504018','0.78','0.22','0.02')
insert into #tb values('7704021','1.25','0.5','0.08')
IF OBJECT_ID('tempdb..#tb') IS NOT NULL DROP TABLE #tb
create table #tb(A1 varchar(20), B1 VARCHAR(10) , C1 VARCHAR(10),D1 VARCHAR(10))
insert into #tb values('Fitemid','3002','2980','75C')
insert into #tb values('5504014','0.48','0.25','0.01')
insert into #tb values('5504018','0.78','0.22','0.02')
insert into #tb values('7704021','1.25','0.5','0.08')
;WITH cte(Item) AS (
SELECT B1 FROM #tb WHERE A1='Fitemid'
UNION ALL
SELECT C1 FROM #tb WHERE A1='Fitemid'
UNION ALL
SELECT D1 FROM #tb WHERE A1='Fitemid'
)
,cte2 AS (
SELECT ROW_NUMBER() OVER (PARTITION BY a.A1 ORDER BY a.B1) AS rid,a.A1,b.Item,a.B1
FROM #tb AS a CROSS APPLY cte AS b
WHERE a.A1!='Fitemid'
)
SELECT
A1 AS [产品名称]
,[Item] AS [子项名称]
,(SELECT CASE rid WHEN 1 THEN B1 WHEN 2 THEN C1 ELSE D1 END FROM #tb AS b WHERE b.A1=a.A1) AS [用量]
FROM cte2 a ORDER BY a.a1
/*
产品名称 子项名称 用量
-------------------- ---------- ----------
5504014 3002 0.48
5504014 2980 0.25
5504014 75C 0.01
5504018 75C 0.78
5504018 2980 0.22
5504018 3002 0.02
7704021 3002 1.25
7704021 2980 0.5
7704021 75C 0.08
*/
create table #tb(A1 varchar(20), B1 VARCHAR(10) , C1 VARCHAR(10),D1 VARCHAR(10))
insert into #tb values('Fitemid','3002','2980','75C')
insert into #tb values('5504014','0.48','0.25','0.01')
insert into #tb values('5504018','0.78','0.22','0.02')
insert into #tb values('7704021','1.25','0.5','0.08')
;WITH cte AS (
SELECT A1 AS 产品名称 ,
( SELECT TOP 1
B1
FROM #tb a
WHERE A1 = 'Fitemid'
) AS 子项名称 ,
B1 AS 用量
FROM #tb
WHERE A1 <> 'Fitemid'
UNION
SELECT A1 ,
( SELECT TOP 1
C1
FROM #tb a
WHERE A1 = 'Fitemid'
) AS 子项名称 ,
C1
FROM #tb
WHERE A1 <> 'Fitemid'
UNION
SELECT A1 ,
( SELECT TOP 1
D1
FROM #tb a
WHERE A1 = 'Fitemid'
) AS 子项名称 ,
D1
FROM #tb
WHERE A1 <> 'Fitemid'
)
SELECT * FROM cte
DROP TABLE #tb
WITH CTE1
AS
(select B1,'B1' as item_type from table
where A1='Fitemid'
UNION ALL
select C1,'C1' from table
where A1='Fitemid'
UNION ALL
select D1,'D1' from table
where A1='Fitemid'),
CTE2
AS
(select A1,B1,'B1' as item_type from table
where A1<>'Fitemid'
UNION ALL
select A1,C1,'C1' from table
where A1<>'Fitemid'
UNION ALL
select A1,D1,'D1' from table
where A1<>'Fitemid')
SELECT A.A1,B.B1,A.B1 FROM CTE2 A
JOIN CTE1 B ON A.item_type=B.item_type
order by A.A1