【发布时间】:2020-08-21 10:31:44
【问题描述】:
请帮帮我:
我想按 TestType 列分组,但如果 TestType 相同,则 Result 应拆分为列
CREATE TABLE Result(WorkOrder varchar(10), TestType varchar(20), Result decimal(10,2));
INSERT INTO Result (WorkOrder, TestType, Result) VALUES
('HP19002316','VitaminA', 10.3),
('HP19002316','VitaminA', 11.3),
('HP19002316','VitaminA', 12.3),
('HP19002316','VitaminB', 13.4),
('HP19002316','VitaminB', 14.4),
('HP19002316','VitaminC', 15.5),
('HP19002316','VitaminD', 17.0)
我希望 SQL 以这种格式返回数据
WorkOrder TestType Result1 Result2 Result3
==========================================================
HP19002316 VitaminA 10.3 11.3 12.3
HP19002316 VitaminB 13.4 14.4 NULL
HP19002316 VitaminC 15.5 NULL NULL
HP19002316 VitaminD 17.0 NULL NULL
Result# 列应该是动态的,因为每个 TestType 都有很多结果
【问题讨论】:
-
回答:如果您希望列数可变,则需要动态 SQL。常规 SQL 无法做到这一点。
-
“我想要”不是问题。你需要什么帮助? 你的尝试没有成功怎么办?你有什么尝试?
-
另外,您的数据中的什么表示什么是“Result1”、“Result2”和“Result3”?你没有总是升序的键,那么什么决定了“顺序”?
-
然而,您在此处所追求的称为数据透视表或交叉表(条件聚合)。这很可能与
ROW_NUMBER结合使用。正如@TimBiegeleisen 所建议的那样,如果TestType的最大行数无法确定,您也需要动态SQL。 -
谢谢大家,在发帖之前,我尝试过使用动态 SQL 和 pivot 但没有帮助。如果您有任何指导,我们将不胜感激。提前谢谢你。
标签: sql sql-server