V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
7911364440
V2EX  ›  程序员

数据库多行转一个行的问题

  •  
  •   7911364440 · 2023-04-24 10:13:30 +08:00 · 1096 次点击
    这是一个创建于 376 天前的主题,其中的信息可能已经有所发展或是发生改变。

    数据库用的 Oracle 。

    多行数据根据 code 字段合并为一行,再根据 type 字段判断:

    • 当 type=1 时,该行的 field1, field2, field3 = value1, value2, value3
    • 当 type=2 时,该行的 field1, field2, field3 = value4, value5, value6
    • 当 type=3 时,该行的 field1, field2, field3 = value7, value8, value9
    3 条回复    2023-04-24 11:41:05 +08:00
    YouKnowIt
        1
    YouKnowIt  
       2023-04-24 10:49:13 +08:00
    以前有个网站好像叫 帮你百度一下,以后可能会有 帮你 ChatGPT 一下 这种网站,以下是来自 chatgpt 的回答:
    您可以使用 Oracle 的 PIVOT 和 UNPIVOT 函数来实现根据 code 字段合并行并按照 type 字段转换列的操作。具体实现过程将包括以下步骤:

    1.使用 PIVOT 函数将具有相同 code 值的多行数据合并为单个行。
    2.使用 UNPIVOT 函数将 type 字段转换为列并将对应的值填入相应的字段中。
    3.使用 SELECT 语句来检索结果。

    下面是一个示例 SQL 查询:
    SELECT * FROM
    (
    SELECT code, type, field1, field2, field3
    FROM your_table
    )
    PIVOT
    (
    MAX(field1) AS field1, MAX(field2) AS field2, MAX(field3) AS field3
    FOR type IN (1, 2, 3)
    )
    UNPIVOT
    (
    value
    FOR (field, type) IN ((field1, 1), (field2, 1), (field3, 1), (field1, 2), (field2, 2), (field3, 2), (field1, 3), (field2, 3), (field3, 3))
    );
    这将返回一个结果集,其中每个行包含相同的 code 值,以及列名( field )和相应的值( value )。
    ccraohng
        2
    ccraohng  
       2023-04-24 11:20:18 +08:00
    CASE 就行
    SELECT CASE WHEN xxx TEHN 1 END
    chosen1cwp
        3
    chosen1cwp  
       2023-04-24 11:41:05 +08:00
    select GROUP_CONCAT(concat("'",name,"'")) from table group by field
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2450 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:07 · PVG 23:07 · LAX 08:07 · JFK 11:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.