我正在尝试获取一个数据库查询,其中包含来自一个表的一些输入和另一个表中的一些输入。我知道怎么做但我的问题是在我的查询中我必须从这个表中获取值:
AID | Meet | Event | Score
--------------------------
1 | Val | Beam | 9.47
1 | Snow | Beam | 7.78
我需要分别从雪会和val会面得到分数值,所以我的输出查询将如下所示:
AID | SnowScore | ValScore
--------------------------
1 | 7.78 | 9.47
我很困惑从哪里开始。对不起,如果这令人困惑,很难描述。谢谢你的帮助。
答案 0 :(得分:1)
这种结果非常迂回。您必须单独查询每个列。
试试这个:
SELECT s.AID, s.Score AS SnowScore, v.Score as ValScore
FROM tbl s INNER JOIN tbl v ON (s.AID = v.AID)
WHERE s.Meet = "Snow" AND v.Meet = "Val";
如果列"得分"可以为空,你必须使用外连接而不是内连接。
如果每个AID和Meet的分数不止一个,您还可以考虑AID子句的聚合函数和组。
答案 1 :(得分:0)
MS SQL Server 2008架构设置:
查询1 :
DECLARE @TABLE TABLE(AID INT, Meet VARCHAR(10), [Event] VARCHAR(10),Score DECIMAL(10,2))
INSERT INTO @TABLE VALUES
(1 , 'Val' , 'Beam' ,9.47),
(1 , 'Snow' , 'Beam' ,7.78),
(2 , 'Val' , 'Beam' ,9.50),
(2 , 'Snow' , 'Beam' ,7.50)
SELECT AID
,Snow AS SnowScore
,Val AS ValScore
FROM @TABLE T
PIVOT (SUM(Score)
FOR Meet
IN (Snow, Val)
)p
<强> Results 强>:
| AID | SNOWSCORE | VALSCORE |
|-----|-----------|----------|
| 1 | 7.78 | 9.47 |
| 2 | 7.5 | 9.5 |
SELECT AID
,SUM(CASE WHEN Meet = 'Val' THEN Score ELSE NULL END) AS ValScore
,SUM(CASE WHEN Meet = 'Snow' THEN Snow ELSE NULL END) AS SnowScore
FROM Table_Name
GROUP BY AID