gpt4 book ai didi

oracle - SQL查询-当表中的其他列具有特定值时,行分隔列

转载 作者:行者123 更新时间:2023-11-30 21:45:44 25 4
gpt4 key购买 nike

我被困在 OracleDB 中的特定任务中。我正在使用 SQLDeveloper 编写 sql 查询,我需要根据其他列数据将行转换为列。

当“SPRID”列中的值为“DE”且“ARTTXTNUMMER”为“1”时,我需要将“ARTTXTTXT”的值放入“TXT1-DE”列中。当“SPRID”列中的值为“IT”且“ARTTXTNUMMER”为“1”时,我需要将“ARTTXTTXT”的值放在与“TXT1”的值相同的行的“TXT1-IT”列中-DE”。当“SPRID”列中的值为“DE”且“ARTTXTNUMMER”为“2”时,我需要将“ARTTXTTXT”的值放入“TXT2-DE”列中。当“SPRID”列中的值为“IT”且“ARTTXTNUMMER”为“2”时,我需要将“ARTTXTTXT”的值放入“TXT2-IT”列中。

我什至对 2 个表进行了 LEFT JOIN。

我的查询是这样的:

SELECT
artikel.artid,
artikel.artkode,
artikel.artbarcode,
artikeltexte.arttxtnummer,
artikeltexte.sprid,
artikeltexte.arttxttext,
artikel.herstellid
FROM
artikel
LEFT JOIN artikeltexte ON artikel.artid = artikeltexte.artid

输出是这样的:

ARTID   ARTKODE ARTBARCODE  ARTTXTNUMMER    SPRID   ARTTXTTEXT  HERSTELLID
074L 260631 802863300108 1 DE txt074L-1-DE 4568794H
074L 260631 802863300108 1 IT txt074L-1-IT 4568794H
074L 260631 802863300108 2 DE txt074L-2-DE 4568794H
074L 260631 802863300108 2 IT txt074L-2-IT 4568794H
071A 784520 80781200896 1 DE txt071A-1-DE 4577882H
071A 784520 80781200896 1 IT txt071A-1-IT 4577882H
073W 898000 87846213567 1 DE txt073W-1-DE 4505020H
073W 898000 87846213567 1 IT txt073W-1-IT 4505020H
073W 898000 87846213567 2 DE txt073W-2-DE 4505020H
073W 898000 87846213567 2 IT txt073W-2-IT 4505020H

如您所见,每篇文章都有多行。我需要每篇文章有 1 行,信息列如下:

    ARTID   ARTKODE ARTBARCODE  ARTTXTTEXT  HERSTELLID  TXT1-DE TXT1-IT TXT2-DE TXT2-IT
074L 260631 802863300108 txt074L-1-DE 4568794H txt074L-1-DE txt074L-1-IT txt074L-2-DE txt074L-2-IT
071A 784520 80781200896 txt071A-1-DE 4577882H txt071A-1-DE txt071A-1-IT
073W 898000 87846213567 txt073W-2-IT 4505020H txt073W-1-DE txt073W-1-IT txt073W-2-DE txt073W-2-IT

最佳答案

您可以在选择性过滤器和(假)聚合时使用 CASE (本示例中的最小值)用于压缩行的函数

  SELECT
artikel.artid,
artikel.artkode,
artikel.artbarcode,
artikeltexte.arttxtnummer,
artikeltexte.arttxttext,
artikel.herstellid,
min(case when SPRID = 'DE' and ARTTXTNUMMER = 1 THEN ARTTXTTXT else null END ) TXT1_DE,
min(case when SPRID = 'IT' and ARTTXTNUMMER = 1 THEN ARTTXTTXT else null END ) TXT1_IT,
min(case when SPRID = 'DE' and ARTTXTNUMMER = 2 THEN ARTTXTTXT else null END ) TXT2_DE,
min(case when SPRID = 'IT' and ARTTXTNUMMER = 2 THEN ARTTXTTXT else null END ) TXT2_IT
FROM
artikel
LEFT JOIN artikeltexte ON artikel.artid = artikeltexte.artid
GROUP BY artikel.artid,
artikel.artkode,
artikel.artbarcode,
artikeltexte.arttxtnummer,
artikeltexte.arttxttext,
artikel.herstellid

如果您需要为每个文章排一行,您应该删除(或 group_concat)不允许正确分组的值,例如:

    SELECT
artikel.artid,
artikel.artkode,
artikel.artbarcode,
artikel.herstellid,
min(case when SPRID = 'DE' and ARTTXTNUMMER = 1 THEN ARTTXTTXT else null END ) TXT1_DE,
min(case when SPRID = 'IT' and ARTTXTNUMMER = 1 THEN ARTTXTTXT else null END ) TXT1_IT,
min(case when SPRID = 'DE' and ARTTXTNUMMER = 2 THEN ARTTXTTXT else null END ) TXT2_DE,
min(case when SPRID = 'IT' and ARTTXTNUMMER = 2 THEN ARTTXTTXT else null END ) TXT2_IT
FROM
artikel
LEFT JOIN artikeltexte ON artikel.artid = artikeltexte.artid
GROUP BY artikel.artid,
artikel.artkode,
artikel.artbarcode,
artikel.herstellid

关于oracle - SQL查询-当表中的其他列具有特定值时,行分隔列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49573675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com