简体   繁体   中英

SQL add an extra column from table

I've looked around the web but SQL is new to me so the correct syntax escapes me because of all the fancy joins etc. How would I be able to achieve the following:

SELECT 
event.Id, 
event.Name, 
event.Date,
event.Size,  
event.Email,  
verificationdata.Value,

/*I want the below value column duplicated, using data from the next comment*/
verificationdata.Value

FROM event
INNER JOIN verification on event.Id = verification.EventId
INNER JOIN verificationdata on verificationdata.vId = verification.Id
WHERE event.Id > 00001
AND 
(verificationdata.Field = 'Grievances'OR verificationdata.Field = 'ERROR')

/*Pulling THIS data into the duplicated column*/
WHERE verificationdata.Field = 'VideoDurationPTS_0'



Id | Name | Date   | Size | Email     | verificationdata.Value  | verificationdata.Value                                   
01 | Dave | 01-Jan | 2000 | d@d.com   | A                       | B                            
02 | Bob  | 02-Jan | 3000 | b@b.com   | A                       | B

A =(Value when verificationdata.Field = Grievances) B =(Value when verificationdata.Field = Duration) Any help would be super!

Try below using conditional aggregation

SELECT 
event.Id, 
event.Name, 
event.Date,
event.Size,  
event.Email,  
MAX(CASE WHEN verification.Field IN ('Grievances') THEN 'A' END) as val1,
MAX(CASE WHEN verification.Field IN ('VideoDurationPTS_0') THEN 'B' END) as 
val2
FROM event
INNER JOIN verification on event.Id = verification.EventId
INNER JOIN verificationdata on verificationdata.vId = verification.Id
WHERE event.Id > 00001
AND 
(verificationdata.Field in( 'Grievances','ERROR','VideoDurationPTS_0')
group by event.Id, event.Name, event.Date, event.Size,  event.Email

If I understand correctly, you want:

SELECT e.Id, e.Name, e.Date, e.Size, e.Email,  
       MAX(CASE WHEN vd.Field IN ('Grievances', 'ERROR') THEN vd.Value END) as field,
       MAX(CASE WHEN vd.Field IN ('VideoDurationPTS_0') THEN vd.Value END) as VideoDurationPTS_0
FROM event e INNER JOIN
     verification v
     ON e.Id = v.EventId INNER JOIN
     verificationdata vd
     ON vd.vId = v.Id
WHERE e.Id > 00001 AND
      vd.Field IN ('Grievances', 'ERROR', 'VideoDurationPTS_0')
GROUP BY e.Id, e.Name, e.Date, e.Size, e.Email;

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM