mysql 使用SELECT命令提取列中的数据并对其进行排序[duplicate]

iswrvxsc  于 2023-01-25  发布在  Mysql
关注(0)|答案(2)|浏览(149)
    • 此问题在此处已有答案**:

(13个答案)
2天前关闭。
我有一个多语言命令的代码表,其结构如下:
| 身份证|电码|朗|正文|
| - ------|- ------|- ------|- ------|
| 1个|退出命令|德|芬斯特·施利森|
| 第二章|退出命令|恩|关闭窗口|
......(lang列还包含其他语言,如意大利语、日语等)
我想从该表中提取德语和英语的所有文本,按代码排序。运行下面的命令,我在同一列中得到德语和英语的混合文本:
SELECT * FROM table WHERE (lang='de' or lang='en')
但是我希望在单独的列中为lang = English设置一列,其中包含English文本,并在单独的列中为lang = German设置一列,其中包含German文本。
输出的结构应如下所示:
| 电码|朗|德文文本|朗|英文文本|
| - ------|- ------|- ------|- ------|- ------|
| 退出命令|德|芬斯特施利森|恩|关闭窗口|
...
我怎样才能用SQL查询得到这个输出?谢谢你的帮助!

fkvaft9z

fkvaft9z1#

此问题福尔斯透视任务:

  • CASE表达式将帮助您提取所需的值。
  • MAX聚合将允许您删除与分区(GROUP BY code_)相关的不需要的NULL值。
SELECT code_,
       'de' AS lang1,
       MAX(CASE WHEN lang = 'de' THEN text_ END) AS GermanText,
       'en' AS lang2,
       MAX(CASE WHEN lang = 'en' THEN text_ END) AS EnglishText
FROM tab
GROUP BY code_

检查here演示。

r6l8ljro

r6l8ljro2#

我将通过code连接表上的两个子查询:

SELECT de.code, de.lang, de.text, en.lang, en.text
FROM   (SELECT code, lang, text
        FROM   mytable
        WHERE  lang = 'de') de
JOIN   (SELECT code, lang, text
        FROM   mytable
        WHERE  lang = 'en') en ON de.code = en.code

相关问题