sql - 用于合并结果的 Pivot 或 Group 函数
问题描述
我有一个代码如下,
WITH result_set
AS (SELECT DISTINCT lt.id AS labTestId,
lt.pass_customer_specs AS passCustomer,
lt.pass_internal_specs AS passInternal,
ltr.lab_test_measurement_id AS ltMeasurementId,
ltc.compound_id AS compoundId,
lt.batch_number AS batch_number,
m.NAME AS NAME,
ltn.id AS test_machine
FROM lab_test lt
JOIN lab_test_result ltr
ON ltr.lab_test_id = lt.id
JOIN lab_test_measurement ltm
ON ltm.id = ltr.lab_test_measurement_id
JOIN lab_test_machine ltn
ON ltn.id = ltm.lab_test_machine_id
JOIN lab_test_compound ltc
ON ltc.compound_id = lt.lab_test_compound_id
JOIN compound c
ON c.id = ltc.compound_id
JOIN measurement m
ON m.id = ltm.measurement_id)
SELECT compoundid,
batch_number,
COALESCE(Cast([1] AS VARCHAR(1)), '-') AS 'MV',
COALESCE(Cast([2] AS VARCHAR(1)), '-') AS 'MDR',
COALESCE(Cast([3] AS VARCHAR(1)), '-') AS 'Hardness',
COALESCE(Cast([9] AS VARCHAR(1)), '-') AS 'SPG'
FROM (SELECT *
FROM result_set) pvt
PIVOT ( Min (passcustomer)
FOR test_machine IN ([1],
[2],
[3],
[9]) ) AS pvt
ORDER BY compoundid,
batch_number
这给了我如下的东西,
我要做的是每个批次编号有一个条目,并将所有“MV”、“MDR”、“硬度”、“SPG”放在 1 行。
解决方案
尝试这个
WITH result_set
AS (SELECT DISTINCT lt.id AS labTestId,
lt.pass_customer_specs AS passCustomer,
lt.pass_internal_specs AS passInternal,
ltr.lab_test_measurement_id AS ltMeasurementId,
ltc.compound_id AS compoundId,
lt.batch_number AS batch_number,
m.NAME AS NAME,
ltn.id AS test_machine
FROM lab_test lt
JOIN lab_test_result ltr
ON ltr.lab_test_id = lt.id
JOIN lab_test_measurement ltm
ON ltm.id = ltr.lab_test_measurement_id
JOIN lab_test_machine ltn
ON ltn.id = ltm.lab_test_machine_id
JOIN lab_test_compound ltc
ON ltc.compound_id = lt.lab_test_compound_id
JOIN compound c
ON c.id = ltc.compound_id
JOIN measurement m
ON m.id = ltm.measurement_id)
SELECT compoundid,batch_number, MAX(MV)MV, MAX(MDR)MDR, MAX(Hardness)Hardness, MAX(SPG)SPG
FROM (
SELECT compoundid,
batch_number,
COALESCE(Cast([1] AS VARCHAR(1)), '-') AS 'MV',
COALESCE(Cast([2] AS VARCHAR(1)), '-') AS 'MDR',
COALESCE(Cast([3] AS VARCHAR(1)), '-') AS 'Hardness',
COALESCE(Cast([9] AS VARCHAR(1)), '-') AS 'SPG'
FROM (SELECT *
FROM result_set) pvt
PIVOT ( Min (passcustomer)
FOR test_machine IN ([1],
[2],
[3],
[9]) ) AS pvt
) X
GROUP BY compoundid, batch_number
ORDER BY compoundid, batch_number
推荐阅读
- d3.js - 用 d3js 计算螺旋分段
- javascript - 平滑滚动以锚定在相同或不同页面上(jQuery)
- svn - Tortoise SVN 存储库创建:我得到错误的默认文件夹结构
- javascript - 调用具有许多参数的函数的更简单方法?
- r - 在 Julia 中编写 R 包?
- console - 运行命令后如何将 ConEmu 保留在当前目录中?
- android - 保持价值观的最佳方式?
- object - 使用Windbg仅获取对象的属性值的方法是什么?
- git - 如何在 Katalon Studio 中使用 TestDataFactory 获取绝对路径
- c - 带有 struct 和 fgets 的 C 程序