22,206
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE T([住院号] NVARCHAR(10),[姓名] NVARCHAR(10),[项目] NVARCHAR(10),[金额] DECIMAL(20,2)) -- 中间省略一些字段
INSERT INTO T (住院号,姓名,项目,金额) VALUES
('101','小明','材料1',50.3),
('101','小明','材料2',20.1),
('101','小明','X光',150.3),
('101','小明','CT',50.3),
('102','大明','材料1',50.3),
('102','大明','材料2',20.1),
('102','大明','X光',150.3),
('102','大明','CTX',50.3)
DECLARE @sqlcol NVARCHAR(max),@sql NVARCHAR(MAX);
;WITH xm AS ( --这里你应该有一个专门的表存,我这里就选当前的一些测试就行了
SELECT DISTINCT 项目 FROM t
)
SELECT @sqlcol=STUFF((SELECT ',['+项目+']' FROM xm FOR XML PATH('')),1,1,'')
SELECT @sql='select * from t pivot (sum(金额) for 项目 in ('+@sqlcol+')) pvt'
EXEC(@sql);
DROP TABLE t;
/*
住院号 姓名 CT CTX X光 材料1 材料2
---------- ---------- -------------------------- ------------------------- ---------------
102 大明 NULL 50.30 150.30 50.30 20.10
101 小明 50.30 NULL 150.30 50.30 20.10
*/
你这个就是行转列,你多查一下。