MS Server 2012
The following query returns the correct data but i need to pivot it and my attempts are failing, any hep would be appreciated..
Query...
SELECT TrialSampleID, ReferenceReadID, Reference_Antibiotic, CONCAT(Reference_Qualifier, ' ', Reference_MIC, ' ug/ml') AS 'MIC' FROM dbo.ClinicalTrial JOIN dbo.ReferenceDataPointers ON ClinicalTrial.ID = ReferenceDataPointers.ClinicalTrialID JOIN dbo.ReferencePlates ON ReferenceDataPointers.ReferenceSetID = ReferencePlates.ReferenceSetID JOIN dbo.ReferenceReads ON ReferencePlates.ID = ReferenceReads.ReferencePlateID JOIN dbo.ReferenceMICs ON ReferenceReads.ID = ReferenceMICs.ReferenceReadID WHERE TrialSampleID NOT LIKE 'REF-%' AND SpecimenSource LIKE 'Clinical%' AND Reference_ValidAntibiotic = 'True
'
Result...
TrialSampleID |ReferenceReadID |Reference_Antibiotic |MIC
CC-200001 | 4077 |Amikacin | = 8 ug/ml
CC-200001 | 4077 |Ampicillin | > 64 ug/ml
CC-200001 | 4077 |Aztreonam | > 64 ug/ml
CC-200001 | 4077 |Cefazolin | > 16 ug/ml
CC-200001 | 4077 |Cefepime | = 64 ug/ml
CC-200001 | 4077 |Ceftazidime | > 64 ug/ml
CC-200001 | 4077 |Ceftazidime/Avibactam | ≤ 2 ug/ml
CC-200001 | 4077 |Ertapenem | ≤ 0.125 ug/ml
CC-200001 | 4077 |Gentamicin | > 32 ug/ml
CC-200001 | 4077 |Levofloxacin | = 8 ug/ml
CC-200001 | 4077 |Meropenem | ≤ 0.125 ug/ml
CC-200001 | 4077 |Meropenem/Vaborbactam | ≤ 0.5 ug/ml
CC-200001 | 4077 |Piperacillin/Tazobactam | = 128 ug/ml
CC-200001 | 4077 |Trimethoprim/Sulfamethoxazole | > 8 ug/ml
The block repeats 6 times for each TrialSampleID giving 6 MICs
I would like the data in the following form but end up with NULL in the MIC column when i pivot the data.
Desired...
TrialSampleID |ReferenceReadID |Reference_Antibiotic |MIC1 |MIC2 |MIC3
CC-200001 | 4077 |Amikacin | = 8 ug/ml | = 8 ug/ml | = 8 ug/ml
CC-200001 | 4077 |Ampicillin | > 64 ug/ml | > 64 ug/ml | > 64 ug/ml
CC-200001 | 4077 |Aztreonam | > 64 ug/ml | > 64 ug/ml | > 64 ug/ml
CC-200001 | 4077 |Cefazolin | > 16 ug/ml | > 16 ug/ml | > 16 ug/ml
CC-200001 | 4077 |Cefepime | = 64 ug/ml | = 64 ug/ml | = 64 ug/ml
CC-200001 | 4077 |Ceftazidime | > 64 ug/ml | > 64 ug/ml | > 64 ug/ml
CC-200001 | 4077 |Ceftazidime/Avibactam | ≤ 2 ug/ml | ≤ 2 ug/ml | ≤ 2 ug/ml
CC-200001 | 4077 |Ertapenem | ≤ 0.125 ug/ml | ≤ 0.125 ug/ml | ≤ 0.125 ug/ml
CC-200001 | 4077 |Gentamicin | > 32 ug/ml | > 32 ug/ml | > 32 ug/ml
CC-200001 | 4077 |Levofloxacin | = 8 ug/ml | = 8 ug/ml | = 8 ug/ml
CC-200001 | 4077 |Meropenem | ≤ 0.125 ug/ml | ≤ 0.125 ug/ml | ≤ 0.125 ug/ml
CC-200001 | 4077 |Meropenem/Vaborbactam | ≤ 0.5 ug/ml | ≤ 0.5 ug/ml | ≤ 0.5 ug/ml
CC-200001 | 4077 |Piperacillin/Tazobactam | = 128 ug/ml | = 128 ug/ml | = 128 ug/ml
CC-200001 | 4077 |Trimethoprim/Sulfamethoxazole | > 8 ug/ml | > 8 ug/ml | > 8 ug/ml
tried...
PIVOT(
MIN(ReferenceReadID)
FOR MIC IN (
MIC1,
MIC2,
MIC3,
MIC4,
MIC5,
MIC6
)
) pivoted
You can try to use condition aggregate function to make it.
CASE WHEN
with MAX
function.
SELECT TrialSampleID,
ReferenceReadID,
Reference_Antibiotic,
MAX(CASE WHEN rn = 1 THEN MIC END) 'MIC1',
MAX(CASE WHEN rn = 2 THEN MIC END) 'MIC2',
MAX(CASE WHEN rn = 3 THEN MIC END) 'MIC3',
MAX(CASE WHEN rn = 4 THEN MIC END) 'MIC4',
MAX(CASE WHEN rn = 5 THEN MIC END) 'MIC5',
MAX(CASE WHEN rn = 6 THEN MIC END) 'MIC6'
FROM (
SELECT
TrialSampleID,
ReferenceReadID,
Reference_Antibiotic,
CONCAT(Reference_Qualifier, ' ', Reference_MIC, ' ug/ml') AS 'MIC',
ROW_NUMBER() OVER(PARTITION BY TrialSampleID,ReferenceReadID,Reference_Antibiotic ORDER BY Reference_Antibiotic) rn
FROM
dbo.ClinicalTrial
JOIN dbo.ReferenceDataPointers ON ClinicalTrial.ID = ReferenceDataPointers.ClinicalTrialID
JOIN dbo.ReferencePlates ON ReferenceDataPointers.ReferenceSetID = ReferencePlates.ReferenceSetID
JOIN dbo.ReferenceReads ON ReferencePlates.ID = ReferenceReads.ReferencePlateID
JOIN dbo.ReferenceMICs ON ReferenceReads.ID = ReferenceMICs.ReferenceReadID
WHERE
TrialSampleID NOT LIKE 'REF-%'
AND SpecimenSource LIKE 'Clinical%'
AND Reference_ValidAntibiotic = 'True'
) t1
Result...
CC-200004 |4089 |Ertapenem |= 0.25 ug/ml |= 0.25 ug/ml |= 0.25 ug/ml |= 0.25 ug/ml |= 0.25 ug/ml |= 0.25 ug/ml
CC-200004 |4086 |Ertapenem |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml
CC-200004 |4087 |Ertapenem |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml
CC-200004 |4088 |Ertapenem |= 0.25 ug/ml |= 0.25 ug/ml |= 0.25 ug/ml |= 0.25 ug/ml |= 0.25 ug/ml |= 0.25 ug/ml
CC-200004 |4085 |Ertapenem |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml
CC-200004 |4084 |Ertapenem |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml
Desired...
CC-200004 |4089 |Ertapenem |= 0.25 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml |= 0.25 ug/ml |≤ 0.125 ug/ml |≤ 0.125 ug/ml
This solved it, Thandk D-Shih for the insight...
SELECT TrialSampleID,
Reference_Antibiotic,
MAX(CASE WHEN rn = 1 THEN MIC END) 'MIC1',
MAX(CASE WHEN rn = 2 THEN MIC END) 'MIC2',
MAX(CASE WHEN rn = 3 THEN MIC END) 'MIC3',
MAX(CASE WHEN rn = 4 THEN MIC END) 'MIC4',
MAX(CASE WHEN rn = 5 THEN MIC END) 'MIC5',
MAX(CASE WHEN rn = 6 THEN MIC END) 'MIC6'
FROM (
SELECT
TrialSampleID,
Reference_Antibiotic,
CONCAT(Reference_Qualifier, ' ', Reference_MIC, ' ug/ml') AS 'MIC',
ROW_NUMBER() OVER(PARTITION BY TrialSampleID, Reference_Antibiotic ORDER BY TrialSampleID, Reference_Antibiotic) rn
FROM
dbo.ClinicalTrial
JOIN dbo.ReferenceDataPointers ON ClinicalTrial.ID = ReferenceDataPointers.ClinicalTrialID
JOIN dbo.ReferencePlates ON ReferenceDataPointers.ReferenceSetID = ReferencePlates.ReferenceSetID
JOIN dbo.ReferenceReads ON ReferencePlates.ID = ReferenceReads.ReferencePlateID
JOIN dbo.ReferenceMICs ON ReferenceReads.ID = ReferenceMICs.ReferenceReadID
WHERE
TrialSampleID NOT LIKE 'REF-%'
AND SpecimenSource LIKE 'Clinical%'
AND Reference_ValidAntibiotic = 'True'
) t1
GROUP BY TrialSampleID, Reference_Antibiotic
ORDER BY TrialSampleID, Reference_Antibiotic
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.