首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中将表的行显示为列

如何在SQL中将表的行显示为列
EN

Stack Overflow用户
提问于 2022-07-22 09:08:48
回答 1查看 48关注 0票数 0

我有两张桌子LANGUAGE

代码语言:javascript
复制
CREATE TABLE LANGUAGE
(
    LANGUAGE_ID nvarchar(10)
);

INSERT INTO LANGUAGE (LANGUAGE_ID)
VALUES ('de-DE'), ('en-EN'), ('de-US'), ('fr-FR'), ('es-ES');

和一个表TRANSLATION,它包含多种语言的TEXT_ID的所有翻译:

代码语言:javascript
复制
CREATE TABLE TRANSLATION
(
    TEXT_ID nvarchar(20), 
    LANGUAGE_ID varchar(10), 
    TRANSLATION varchar(200)
);

INSERT INTO TRANSLATION (TEXT_ID, LANGUAGE_ID, TRANSLATION)
VALUES
    ('wire', 'de-DE', 'Draht'),
    ('wire', 'en-EN', 'Wire'),
    ('wire', 'en-US', 'Wire'),
    ('wire', 'fr-FR', 'fr:Draht'),
    ('wire', 'es-ES', 'es:Draht'),
    ('brush', 'de-DE', 'Buerste'),
    ('brush', 'en-EN', 'Brush'),
    ('brush', 'en-US', 'us_Brush'),
    ('screw', 'en-US', 'Screw');

因此,我希望在一行中获得一个TEXT_ID的所有翻译的列表:

代码语言:javascript
复制
TEXT_ID     de-DE       en-EN       en-US       fr-FR       es-ES
--------------------------------------------------------------------
wire        Draht       Wire        Wire        fr:Draht    es:Draht
brush       Buerste     Brush       us_Brush
screw                               Screw

是否有一种纯粹的SQL方式来做到这一点?

目前我正在使用Server。但我们有可能想要迁移到另一个数据库。

示例SQLFiddle

EN

回答 1

Stack Overflow用户

发布于 2022-07-22 09:17:43

我们可以使用一些日历表逻辑来尝试枢轴查询。首先,构建一个包含所有关键字和语言的中间表。然后,将其连接到TRANSLATION表和支点。

代码语言:javascript
复制
SELECT
    t.TEXT_ID,
    MAX(CASE WHEN l.LANGUAGE_ID = 'de-DE' THEN tr.TRANSLATION END) AS [de-DE],
    MAX(CASE WHEN l.LANGUAGE_ID = 'en-EN' THEN tr.TRANSLATION END) AS [en-EN],
    MAX(CASE WHEN l.LANGUAGE_ID = 'en-US' THEN tr.TRANSLATION END) AS [en-US],
    MAX(CASE WHEN l.LANGUAGE_ID = 'fr-FR' THEN tr.TRANSLATION END) AS [fr-FR],
    MAX(CASE WHEN l.LANGUAGE_ID = 'es-ES' THEN tr.TRANSLATION END) AS [es-ES]
FROM (SELECT DISTINCT TEXT_ID FROM TRANSLATION) t
CROSS JOIN LANGUAGE l
LEFT JOIN TRANSLATION tr
    ON tr.TEXT_ID = t.TEXT_ID AND
       tr.LANGUAGE_ID = l.LANGUAGE_ID
GROUP BY t.TEXT_ID;

请注意,如果需要动态列数,则可能需要使用动态SQL,这基本上意味着编写SQL Server代码来生成查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73077843

复制
相关文章

相似问题

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