首页 > 解决方案 > 将两行以上合并为一行并将正确的数据放入右列

问题描述

首先,如果问题标题让你们感到困惑,我很抱歉,但让我告诉你们我想要什么。

假设我有一个名为topic的表。

Topic_ID | Parent_Topic_ID | Topic_Text           | lang_culture
---------|-----------------|----------------------|--------------
    1    |       0         | Newton's Law         |   en-US
    2    |       1         | First Law            |   en-US

现在我有另一个名为translate_topic的表,其中相同的主题以不同的语言存储

Topic_ID | text                | lang_culture
---------|-------------------- |--------------
   1     | न्यूटन का नियम        |   hi-IN
   1     | loi de newton       |   fr-FR

   2     | पहला कानून           |  hi-IN
   2     | Première loi        |  fr-FR

现在,我想要这样的显示输出......

Topic_ID | Topic_Text         | lang_culture | hi-In            | fr-FR     
---------|--------------------|--------------|------------------ |-------------
    1    |    Newton's Law    |en-US         | न्यूटन का नियम      | loi de newton
    2    |    First Law       | en-US        | पहला कानून         |Première loi

如何在 SQL-server 中实现此输出?

我现在得到的,

 SELECT td.topic_id,
           td.Topic_Text AS MainText,
           td.lang_culture,
           tt.text,
           tt.lang_culture
    FROM dbo.topic td
        LEFT JOIN dbo.translated_topic tt
            ON td.topic_id = tt.topic_id;

但在那之后不知道如何得到我想要的结果?

标签: sqlsql-server

解决方案


您可以如下所示进行 PIVOT-

SELECT *
FROM
(
    SELECT A.Topic_ID,A.Parent_Topic_ID,A.Topic_Text,A.lang_culture lang_culture,B.lang_culture B,B.text
    FROM Table1 A
    INNER JOIN Table2 B ON A.Topic_ID = B.Topic_ID
)P 
PIVOT
(
    MAX(text)
    FOR B IN ([hi-IN],[fr-FR])
) PVT

推荐阅读