3

我在下面有这张表

在此处输入图像描述

我如何制作这样的输出

在此处输入图像描述

我使用此查询完成了上面的输出:

SELECT DISTINCT 
    C.RefVal, 
    C.CalibrationEventID, 
    C1.Result As "Trial One", 
    C2.Result AS "Trial Two", 
    C3.Result AS "Trial Three", 
    C4.Result AS "Trial Four", 
    C5.Result AS "Trial Five" 
FROM CalibrationTrials AS C 
INNER JOIN 
    (SELECT DISTINCT RefVal, Result FROM CalibrationTrials WHERE CalibrationEventID = 'CAL000001' AND RefVal = '1.0010'AND TrialNo = 1) As C1 
ON C1.RefVal = C.RefVal
INNER JOIN 
    (SELECT DISTINCT RefVal, Result FROM CalibrationTrials WHERE CalibrationEventID = 'CAL000001' AND RefVal = '1.0010'AND TrialNo = 2) As C2 
ON C2.RefVal = C.RefVal
INNER JOIN 
    (SELECT DISTINCT RefVal, Result FROM CalibrationTrials WHERE CalibrationEventID = 'CAL000001' AND RefVal = '1.0010'AND TrialNo = 3) As C3 
ON C3.RefVal = C.RefVal
INNER JOIN 
    (SELECT DISTINCT RefVal, Result FROM CalibrationTrials WHERE CalibrationEventID = 'CAL000001' AND RefVal = '1.0010'AND TrialNo = 4) As C4 
ON C4.RefVal = C.RefVal
INNER JOIN 
    (SELECT DISTINCT RefVal, Result FROM CalibrationTrials WHERE CalibrationEventID = 'CAL000001' AND RefVal = '1.0010'AND TrialNo = 5) As C5 
ON C5.RefVal = C.RefVal

WHERE C.CalibrationEventID = 'CAL000001' AND C.RefVal = '1.0010'
ORDER BY C.RefVal, C.CalibrationEventID

显然,使用此查询,输出仅固定为一个 RefVal,即“1.0010”

为 CalibrationEventID 的每个 RefVal 输出 image2 格式的正确查询是什么?

4

1 回答 1

2

以下是如何为查询使用PIVOT子句:

SELECT
  RefVal,
  CalibrationEventID,
  [1] AS [Trial One],
  [2] AS [Trial Two],
  [3] AS [Trial Three],
  [4] AS [Trial Four],
  [5] AS [Trial Five],
  [6] AS [Trial Six]
FROM CalibrationTrials
PIVOT (
  MAX(Result) FOR TrialNo IN ([1], [2], [3], [4], [5], [6])
) AS p

以上假设您的表仅包含 columns RefVal, CalibrationEventID, TrialNo, Result。如果表中有更多列,则应先分别选择这四个,然后应用 PIVOT。这里:

SELECT
  RefVal,
  CalibrationEventID,
  [1] AS [Trial One],
  [2] AS [Trial Two],
  [3] AS [Trial Three],
  [4] AS [Trial Four],
  [5] AS [Trial Five],
  [6] AS [Trial Six]
FROM (
  SELECT
    RefVal,
    CalibrationEventID,
    TrialNo,
    Result
  FROM CalibrationTrials
) AS c
PIVOT (
  MAX(Result) FOR TrialNo IN ([1], [2], [3], [4], [5], [6])
) AS p

这是必需的,因为 PIVOT 查询本质上是一种特殊情况的 GROUP BY 查询。除了隐式Result参与分组之外的所有列。这就是为什么你应该摆脱这种分组中不需要的那些。

这是另一种方法,没有 PIVOT:

SELECT
  RefVal,
  CalibrationEventID,
  MAX(CASE TrialNo WHEN 1 THEN Result END) AS [Trial One],
  MAX(CASE TrialNo WHEN 2 THEN Result END) AS [Trial Two],
  MAX(CASE TrialNo WHEN 3 THEN Result END) AS [Trial Three],
  MAX(CASE TrialNo WHEN 4 THEN Result END) AS [Trial Four],
  MAX(CASE TrialNo WHEN 5 THEN Result END) AS [Trial Five],
  MAX(CASE TrialNo WHEN 6 THEN Result END) AS [Trial Six]
FROM CalibrationTrials
GROUP BY
  RefVal,
  CalibrationEventID
于 2012-05-31T09:31:54.743 回答