--測試表與測試資料
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
ctwo 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
ctwo d e
f
帆軟報表查詢結果為空時不顯示報表內容
描述 在製作一些報表的時候,為了美觀,整潔,通常需要將查詢結果為空的行不顯示在報表中,這也是最近開發過程中碰到的乙個需求,那麼這種效果怎麼實現呢?處理思路 報表區域是否顯示,其實最簡單的方式就是設定行高,當行高為0的時候,自然也就實現了隱藏效果。具體方法 方法1 條件屬性 非空字段為空,則該行的行高...
SQL查詢的幾種方式
1 左連線 left join 或者 left outer join 2 左連線 table a表資料全部顯示,table b根據條件匹配table a 匹配上顯示,否則顯示null 3 select from table a 4 select from table b 5 select from ...
SQL查詢的幾種方式
1 左連線 left join 或者 left outer join 2 左連線 table a表資料全部顯示,table b根據條件匹配table a 匹配上顯示,否則顯示null 3 select from table a 4 select from table b 5 select from ...