简体   繁体   English

SQL 从表中添加一个额外的列

[英]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:我环顾了整个网络,但 SQL 对我来说是新的,因此正确的语法由于所有花哨的连接等而使我无法理解。我将如何实现以下目标:

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! A =(Verificationdata.Field = Grievances 时的值) B =(Verificationdata.Field = Duration 时的值) 任何帮助都会很棒!

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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