-- 测试数据
CREATE TABLE tb(样品编号 char(3), 项目 nvarchar(10), 检测结果 decimal(10,2))
INSERT tb SELECT '001', N'铜', 0.02
UNION ALL SELECT '001', N'铁', 0.04
UNION ALL SELECT '003', N'铝', 0.04
UNION ALL SELECT '004', N'钠', 0.08
GO-- 查询处理
SELECT 样品编号 = CASE WHEN BB.bz = 0 THEN '样品编号' ELSE RTRIM(样品编号) END,
项目一 = MAX(CASE WHEN Row = 1 THEN CASE WHEN BB.bz = 0 THEN 项目 ELSE RTRIM(检测结果) END END),
项目二 = MAX(CASE WHEN Row = 2 THEN CASE WHEN BB.bz = 0 THEN 项目 ELSE RTRIM(检测结果) END END),
项目三 = MAX(CASE WHEN Row = 3 THEN CASE WHEN BB.bz = 0 THEN 项目 ELSE RTRIM(检测结果) END END),
项目四 = MAX(CASE WHEN Row = 4 THEN CASE WHEN BB.bz = 0 THEN 项目 ELSE RTRIM(检测结果) END END),
项目五 = MAX(CASE WHEN Row = 5 THEN CASE WHEN BB.bz = 0 THEN 项目 ELSE RTRIM(检测结果) END END)
FROM(
SELECT *,
Row = (SELECT COUNT(*) FROM tb WHERE 样品编号 = A.样品编号 AND 项目 >= A.项目)
FROM tb a
)AA
CROSS JOIN(
SELECT bz = 0 UNION ALL SELECT bz = 1
)BB
GROUP BY 样品编号, BB.bz
ORDER BY CASE WHEN BB.bz = 0 THEN 样品编号 ELSE 样品编号 END, BB.bz
GODROP TABLE tb/*-- 结果样品编号 项目一 项目二 项目三 项目四 项目五
-------- ---------------------------------------- ------------------------
样品编号 铜 铁 NULL NULL NULL
001 0.02 0.04 NULL NULL NULL
样品编号 铝 NULL NULL NULL NULL
003 0.04 NULL NULL NULL NULL
样品编号 钠 NULL NULL NULL NULL
004 0.08 NULL NULL NULL NULL(所影响的行数为 6 行)
--*/
CREATE TABLE tb(样品编号 char(3), 项目 nvarchar(10), 检测结果 decimal(10,2))
INSERT tb SELECT '001', N'铜', 0.02
UNION ALL SELECT '001', N'铁', 0.04
UNION ALL SELECT '003', N'铝', 0.04
UNION ALL SELECT '004', N'钠', 0.08
GO-- 查询处理
SELECT 样品编号 = CASE WHEN BB.bz = 0 THEN '样品编号' ELSE RTRIM(样品编号) END,
项目一 = MAX(CASE WHEN Row = 1 THEN CASE WHEN BB.bz = 0 THEN 项目 ELSE RTRIM(检测结果) END END),
项目二 = MAX(CASE WHEN Row = 2 THEN CASE WHEN BB.bz = 0 THEN 项目 ELSE RTRIM(检测结果) END END),
项目三 = MAX(CASE WHEN Row = 3 THEN CASE WHEN BB.bz = 0 THEN 项目 ELSE RTRIM(检测结果) END END),
项目四 = MAX(CASE WHEN Row = 4 THEN CASE WHEN BB.bz = 0 THEN 项目 ELSE RTRIM(检测结果) END END),
项目五 = MAX(CASE WHEN Row = 5 THEN CASE WHEN BB.bz = 0 THEN 项目 ELSE RTRIM(检测结果) END END)
FROM(
SELECT *,
Row = (SELECT COUNT(*) FROM tb WHERE 样品编号 = A.样品编号 AND 项目 >= A.项目)
FROM tb a
)AA
CROSS JOIN(
SELECT bz = 0 UNION ALL SELECT bz = 1
)BB
GROUP BY 样品编号, BB.bz
ORDER BY CASE WHEN BB.bz = 0 THEN 样品编号 ELSE 样品编号 END, BB.bz
GODROP TABLE tb/*-- 结果样品编号 项目一 项目二 项目三 项目四 项目五
-------- ---------------------------------------- ------------------------
样品编号 铜 铁 NULL NULL NULL
001 0.02 0.04 NULL NULL NULL
样品编号 铝 NULL NULL NULL NULL
003 0.04 NULL NULL NULL NULL
样品编号 钠 NULL NULL NULL NULL
004 0.08 NULL NULL NULL NULL(所影响的行数为 6 行)
--*/
样品编号 项目一 项目二 项目三 项目四 项目五
"样品编号" "铜" "铁" null null null
"001" "0.02" "0.04" null null null
"样品编号" "铝" "样品编号" "钠" null null
"003" "0.04" "004" "0.08" null null