SQL选择行数据作为单个列

时间:2014-09-08 17:34:28

标签: sql database

我正在尝试获取一个数据库查询,其中包含来自一个表的一些输入和另一个表中的一些输入。我知道怎么做但我的问题是在我的查询中我必须从这个表中获取值:

AID | Meet | Event | Score
--------------------------
1   | Val  | Beam  | 9.47
1   | Snow | Beam  | 7.78

我需要分别从雪会和val会面得到分数值,所以我的输出查询将如下所示:

AID | SnowScore | ValScore
--------------------------
1   | 7.78      | 9.47

我很困惑从哪里开始。对不起,如果这令人困惑,很难描述。谢谢你的帮助。

2 个答案:

答案 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)

SQL Fiddle

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