zoukankan      html  css  js  c++  java
  • SQL查询:主从表 报表方式显示

    --测试表与测试数据
    CREATE TABLE test_main (
    id      INT,
    value   VARCHAR(10),
    PRIMARY KEY(id)
    );
    -- 创建测试子表.
    CREATE TABLE test_sub (
    id      INT,
    main_id INT,
    value   VARCHAR(10),
    PRIMARY KEY(id)
    );
    -- 插入测试主表数据.
    INSERT INTO test_main(id, value) VALUES (1, 'ONE');
    INSERT INTO test_main(id, value) VALUES (2, 'TWO');
    -- 插入测试子表数据.
    INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'A');
    INSERT INTO test_sub(id, main_id, value) VALUES (2, 1, 'B');
    INSERT INTO test_sub(id, main_id, value) VALUES (3, 1, 'C');
    INSERT INTO test_sub(id, main_id, value) VALUES (4, 2, 'D');
    INSERT INTO test_sub(id, main_id, value) VALUES (5, 2, 'E');
    INSERT INTO test_sub(id, main_id, value) VALUES (6, 2, 'F');

    要求:主从表关联的时候,主表仅仅第一条记录显示,后面相同的情况下,不显示
    默认情况下
    ---------- ----------
    ONE        A
    ONE        B
    ONE        C
    TWO        D
    TWO        E
    TWO        F
    希望查询结果能变为
    ---------- ----------
    ONE        A
                    B
                    C
    TWO      D
                   E
                   F
    思路:
    首先, 根据主表的数据 分组显示 ROW_NUMBER
    然后,仅仅显示 ROW_NUMBER = 1 的主表数据, 其他的主表数据不显示
    实现
    第一步 根据主表的数据 分组显示 ROW_NUMBER
    SELECT
    test_main.value,
    test_sub.value,
    ROW_NUMBER() OVER (PARTITION BY test_main.value ORDER BY test_sub.value)
    FROM
    test_main,
    test_sub
    WHERE
    test_main.id = test_sub.main_id
    value      value
    ---------- ---------- --------------------
    ONE        A                             1
    ONE        B                             2
    ONE        C                             3
    TWO        D                             1
    TWO        E                             2
    TWO        F                             3
    第二步 仅仅显示 ROW_NUMBER = 1 的主表数据, 其他的主表数据不显示
    SELECT
    CASE WHEN
        ROW_NUMBER() OVER (PARTITION BY test_main.value ORDER BY test_sub.value) = 1 THEN test_main.value
        ELSE ''
    END AS Main_Value,
    test_sub.value
    FROM
    test_main,
    test_sub
    WHERE
    test_main.id = test_sub.main_id
    执行结果
    Main_Value value
    ---------- ----------
    ONE        A
               B
               C
    TWO        D
               E
               F
  • 相关阅读:
    有趣的开源家族合照,看看你认识几个?
    fieldset 使用小案例
    java XMPPserver openfire VS tigase
    tomcat 7 jmx配置访问
    JAVA静态域及容器的内存占用探究
    checkStyle字符集不支持解决--Got an exception
    遇到一个很无语的Andorid问题! button 里 android:textColor 属性 设置一个选择器报错!
    android 关于为什么在onCreate里调用view.getChildAt(1).getLeft() 没有值!
    关于Android studio 怎么使用代码混淆的问题!
    sdk manager.exe 闪退 解决办法!
  • 原文地址:https://www.cnblogs.com/zhangqs008/p/3059787.html
Copyright © 2011-2022 走看看