首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL查询洗牌列

SQL查询洗牌列
EN

Stack Overflow用户
提问于 2015-12-20 19:24:57
回答 1查看 350关注 0票数 0

我有几张表格,上面列着不同科目的卷号、主题名和标记。

地质学、数学、物理、生物学等学科共有25门,它们在数据库中被混在一起,比如某地,数学在第三栏,它的标记在第四栏,在第十三列,在第十四栏。标记总是与自己的主题相邻。

是否有任何SQL查询可以安排所有这些主题?

就像所有的生物学一样,科目将出现在第一栏,而它的标记将出现在下一栏。

查询应搜索表格中的所有生物学科目,并将其放在第一栏中,同时从发现生物学的地方替换该栏,即列在第一栏中的主题名称及其标记。

例如:如果第一排有数学,第二排有数学分数,生物在第5栏,生物在第6栏,则应将第1列改为5,第2栏改为6。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-20 20:51:47

有两种方法可以做到这一点。第一种方法是对列进行UNION ALL

代码语言:javascript
运行
复制
SELECT id, col1 AS subject, col2 AS mark FROM table
UNION ALL
SELECT id, col3, col4 FROM table
UNION ALL
...

通过这种方式,您可以创建一个应该用来将其转换为id、subject、mark表的查询。如果您真的不想这样做,那么您可以使用它重新创建您的表:

代码语言:javascript
运行
复制
WITH subjects AS(
SELECT id, col1 AS subject, col2 AS mark FROM tbl
UNION ALL
SELECT id, col3, col4 FROM tbl
UNION ALL
...
)
SELECT id, bio.subject, bio.mark, math.subject, math.mark ...
FROM subjects AS bio
JOIN subject AS math ON bio.id=math.id
JOIN subject AS ...
WHERE bio.subject = 'biology' and math.subject = 'math' and ...

另一种(而且可能更有效的方法是使用CASE语句)

代码语言:javascript
运行
复制
SELECT CASE WHEN col1 = 'biology' THEN col2
       ELSE WHEN col3 = 'biology' THEN col4
       ELSE ...
       AS biology,
       CASE WHEN col1 = 'math' ...
FROM tbl
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34384894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档