如果值也在第二列中,则SQL添加新行
所以我试着从表中提取数据,给我每个人的分数,如果他们有两个分数,我希望它与第二个分数在一条新的线上。如果用户没有分数,我不希望返回任何内容。如果用户有第一个分数,我的查询将返回第一个分数;如果用户没有,则返回第二个分数。但是如果用户有两个分数,我不确定如何在新行中返回该分数 表1如果值也在第二列中,则SQL添加新行,sql,sql-server,Sql,Sql Server,所以我试着从表中提取数据,给我每个人的分数,如果他们有两个分数,我希望它与第二个分数在一条新的线上。如果用户没有分数,我不希望返回任何内容。如果用户有第一个分数,我的查询将返回第一个分数;如果用户没有,则返回第二个分数。但是如果用户有两个分数,我不确定如何在新行中返回该分数 表1 +---------+--------+--------+ | name | score1 | score2 | +---------+--------+--------+ | jim | null
+---------+--------+--------+
| name | score1 | score2 |
+---------+--------+--------+
| jim | null | 87 |
| doug | 21 | 45 |
| brandon | null | null |
| susy | 11 | null |
+---------+--------+--------+
我的查询给出的结果是
+------+----+
| jim | 87 |
| doug | 21 |
| susy | 11 |
+------+----+
想要的产出
+------+----+
| jim | 87 |
| doug | 21 |
| doug | 45 |
| susy | 11 |
+------+----+
我写的问题是
SELECT
name
,COALESCE(score1, score2)
FROM
table
WHERE
score1 IS NOT NULL
OR score2 IS NOT NULL
ORDER BY
name;
将其视为两个单独的查询,并将结果与
UNION ALL
组合在一起。在本例中,您需要UNION ALL
,而不仅仅是UNION
,因此,如果此人在两列中的分数相同,则返回两行
SELECT name, Score1 as score
FROM table1
WHERE Score1 IS NOT NULL
UNION ALL
SELECT name, Score2 as score
FROM table1
WHERE Score2 IS NOT NULL
ORDER BY name, score;
将其视为两个单独的查询,并将结果与
UNION ALL
组合在一起。在本例中,您需要UNION ALL
,而不仅仅是UNION
,因此,如果此人在两列中的分数相同,则返回两行
SELECT name, Score1 as score
FROM table1
WHERE Score1 IS NOT NULL
UNION ALL
SELECT name, Score2 as score
FROM table1
WHERE Score2 IS NOT NULL
ORDER BY name, score;
我建议
交叉应用
:
SELECT t.name, v.score
FROM table t CROSS APPLY
(VALUES (score1), (score2)) v(score)
WHERE v.score IS NOT NULL
ORDER BY name;
这通常是在SQL Server中取消PIVOT数据的最有效方法。我建议
交叉应用
:
SELECT t.name, v.score
FROM table t CROSS APPLY
(VALUES (score1), (score2)) v(score)
WHERE v.score IS NOT NULL
ORDER BY name;
这通常是在SQL Server中取消PIVOT数据的最有效方法。使用
APPLY
或unpivot
。e、 g.从myTable中选择T.Name、C.Score作为T交叉应用(值(T.Score1)、(T.Score2))作为C(Score),其中C.Score不为空
在一个不相关的注释中,查看一些设置帖子格式的提示和工具。@ZLK我不知道您可以交叉应用原始表中的值。谢谢你今天教我一些简洁的东西。使用APPLY
或UNPIVOT
。e、 g.从myTable中选择T.Name、C.Score作为T交叉应用(值(T.Score1)、(T.Score2))作为C(Score),其中C.Score不为空
在一个不相关的注释中,查看一些设置帖子格式的提示和工具。@ZLK我不知道您可以交叉应用原始表中的值。谢谢你今天教我一些整洁的东西。