将两行以上合并为一行,并将正确的数据放入正确的列中

时间:2019-07-18 13:54:01

标签: sql sql-server

首先,很抱歉,如果让您感到困惑,但让我向您展示我想要的东西。

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

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

现在我还有另一个名为 translated_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服务器中实现此输出?

我现在得到的是什么

 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;

但是之后不知道如何获得我想要的结果?

1 个答案:

答案 0 :(得分:1)

您可以按以下方式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