Reputation: 197
I have this table below
How do I make the output like this
I did the output above using this query:
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
Apparently with this query the output is only fixed to one RefVal which is '1.0010'
What would be the correct query to output image2 format for each RefVal of a CalibrationEventID?
Upvotes: 3
Views: 676
Reputation: 77707
Here's how you can use a PIVOT clause for your query:
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
The above assumes that your table consists only of columns RefVal, CalibrationEventID,
TrialNo, Result
. If there are more columns in the table, you should first select these four separately, then apply PIVOT. Here:
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
This is needed because a PIVOT query is essentially a special case GROUP BY query. All columns except Result
take part in grouping implicitly. That's why you should get rid of those that are not needed in this kind of grouping.
And here's an alternative approach, without 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
Upvotes: 2