SQL查询:主从表 报表方式显示
2013-04-16 10:19
267 查看
--测试表与测试数据 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
相关文章推荐
- SQL查询:主从表 报表方式显示
- SQL查询相关技术-3.更改显示报表行项目
- 用SQL查询方式显示GROUP BY中的TOP解决方法[转]
- Hibernate查询之SQL查询,查询结果用new新对象的方式接受,hql查询,通过SQL查询的结果返回到一个实体中,查询不同表中内容,并将查到的不同表中的内容放到List中
- 使用ActiveReport for .net 进行报表开发(四)—显示主从表
- SQL显示查询结果的前100条
- 怎样让SQL查询结果不在屏幕上显示?
- MySQL登陆方式、数据类型、数据引擎及SQL查询语句,注意的问题.
- 常用SQL语句参数化+显示查询结果
- sql查询按in顺序排序显示数据 oracle
- SQL中DateTime类型 模糊查询的方式
- sql 查询字段结果中显示单引号
- 查询所有SQL用户的连接信息(可显示IP)\SQL Server中强制关闭数据库连接
- 优化SQL查询的15个方式(转载)
- Hibernate学习-07:CRUD(增删改查)操作之查询多条/所有记录HQL、QBC、SQL三种方式
- sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果
- 【SQL】—多表查询的几种连接方式
- 企业财务报表查询方式
- SQL分页查询,纯Top方式和row_number()解析函数的使用及区别
- sql中查询一张表显示多列自己需要的数据