格式化行到列sql查询的输出
我有以下基于[Test Parameter Name]的表格(行)格式的数据格式化行到列sql查询的输出,sql,sql-server,Sql,Sql Server,我有以下基于[Test Parameter Name]的表格(行)格式的数据 [Serial Number] [Model] [Recv_Date] [Test Date] [Test Parameter Name] [Test Value] [Test Result] [Tester Name_ID] [Error_Defect Code] 100811000023 M9001 3/20/13 14:18 3/22/13 0:42 Test_1
[Serial Number] [Model] [Recv_Date] [Test Date] [Test Parameter Name] [Test Value] [Test Result] [Tester Name_ID] [Error_Defect Code]
100811000023 M9001 3/20/13 14:18 3/22/13 0:42 Test_1 0 FAIL dev04_9 DC01
100811000023 M9001 3/20/13 14:18 3/22/13 0:42 Test_2 100 PASS dev04_9 DC01
100811000023 M9001 3/20/13 14:18 3/22/13 0:42 Test_3 0 FAIL dev04_9 DC02
100811000023 M9001 3/20/13 14:18 3/22/13 0:42 Test_4 NULL SKIPPED dev04_9 DC02
100811000023 M9001 3/20/13 14:18 3/22/13 0:42 Test_5 120 PASS dev04_9 DC03
100899000345 M9001 3/20/13 23:28 3/21/13 15:55 Test_1 99 PASS dev09_5 DC01
100899000345 M9001 3/20/13 23:28 3/21/13 15:55 Test_2 101 PASS dev09_5 DC01
100899000345 M9001 3/20/13 23:28 3/21/13 15:55 Test_3 103 PASS dev09_5 DC02
100899000345 M9001 3/20/13 23:28 3/21/13 15:55 Test_4 100 PASS dev09_5 DC02
100899000345 M9001 3/20/13 23:28 3/21/13 15:55 Test_5 119 PASS dev09_5 DC03
100811000023 M9001 3/20/13 14:18 3/23/13 13:15 Test_1 0 FAIL dev04_9 DC01
100811000023 M9001 3/20/13 14:18 3/23/13 13:15 Test_2 100 PASS dev04_9 DC01
100811000023 M9001 3/20/13 14:18 3/23/13 13:15 Test_3 0 FAIL dev04_9 DC02
100811000023 M9001 3/20/13 14:18 3/23/13 13:15 Test_4 NULL SKIPPED dev04_9 DC02
100811000023 M9001 3/20/13 14:18 3/23/13 13:15 Test_5 120 PASS dev04_9 DC03
我需要的输出是一个单一的记录,由[Serial Number]基于max[Test Date](一个单元可以运行多次)。然后我需要查看所有[Test Parameter Name]的测试结果,看看它们是通过还是失败。如果出现多个故障,我需要按优先级显示[Error_Defect Code]。注:多个测试被分组为一个[Error_Defect Code],在示例数据中,任何失败测试的报告优先级为:[Error_Defect Code]=“DC03”,然后是“DC02”、“DC01”。。。。如果所有测试均通过,则显示[错误\缺陷代码]的“DC00”。我还想将[Test Parameter Name]旋转以显示[Test Value]
数据示例仅显示5个不同的[Test Parameter Name]值。实际上,我的实际数据有100个不同的[Test Parameter Name]值和15个不同的[Error_Defect Code]
HEARD是我希望输出的外观:
[Serial Number] [Model] [Recv_Date] [Test Date] [Test Result] [Error_Defect Code] [Tester Name_ID] [Test_1] [Test_2] [Test_3] [Test_4] [Test_5]...
100811000023 M9001 3/20/13 14:18 3/23/13 13:15 FAIL DC02 dev04_9 0 100 0 NULL 120
100899000345 M9001 3/20/13 23:28 3/21/13 15:55 PASS DC00 dev09_5 99 101 103 100 119
你试过PIVOT操作符了吗?如果是,你已经走了多远?您必须将PIVOT的结果与实现Test\u result和Error\u Defect\u代码逻辑的查询的结果连接起来。如果您可以有无限数量的测试参数名称,那么您将无法使用SQL查询解决问题,并且需要T-SQL程序。我正在尝试使用T-SQL编程。。。我曾尝试使用PIVOT操作符,但我一直在尝试获取所有字段以生成所需的输出。这将花费比我更多的时间。但基本上如果是我,我会考虑用CTE创建一个基集,用MAX(测试日期)对必要的值进行分组,用CASE语句处理错误代码。然后,我将为数据透视列构建一个字符串,并将两者结合起来创建结果。有关类似的场景,请参见此处: