这里的标题有点令人困惑我完全意识到这一点,但这就是我想要完成的事情。我有一个表,其中一列重复。
表格看起来像这样。
create table testCheck (check_num varchar2(20), amount number(17,2), invh_Code varchar2(20))
它有像这样的数据
INSERT INTO "TESTCHECK" (CHECK_NUM, AMOUNT, INVH_CODE) VALUES ('001', '50', '1123')
INSERT INTO "TESTCHECK" (CHECK_NUM, AMOUNT, INVH_CODE) VALUES ('001', '50', '1123')
INSERT INTO "TESTCHECK" (CHECK_NUM, AMOUNT, INVH_CODE) VALUES ('002', '100', '1234'
我想写一个查询,它会给我一个明确的check_num,但会在实际重复的项目上加上星号。
所以换句话说,在这种情况下,预期结果将如下所示。
"CHECK_NUM" "AMOUNT" "INVH_CODE"
"001*" 50 "1123"
"002" 100 "1234"
请注意,使用check 001,我真的不关心哪些列被选中了金额,而invh_code则是重复的。它只需要成为原始备份记录之一。
我已经能够获得独特的价值,但我不能做的就是找出我的生活如何将星号放在那里。
这是我的查询。
with Checkquery as (
SELECT count(*) over (partition by CHECK_NUM order by CHECK_NUM ROWS UNBOUNDED PRECEDING ) thiscount, CHECK_NUM, AMOUNT, INVH_CODE
FROM TESTCHECK
group by
check_num,
AMOUNT,
INVH_CODE)
select check_num, amount,invh_Code from Checkquery where thiscount ='1';
有人可以指出我正确的方向。我只是想识别在记录上放一个星号的副本,然后只选择其中一个记录。
答案 0 :(得分:1)
Oracle 11g R2架构设置:
create table testCheck (check_num varchar2(20), amount number(17,2), invh_Code varchar2(20));
INSERT INTO "TESTCHECK" (CHECK_NUM, AMOUNT, INVH_CODE) VALUES ('001', '50', '1123');
INSERT INTO "TESTCHECK" (CHECK_NUM, AMOUNT, INVH_CODE) VALUES ('001', '50', '1123') ;
INSERT INTO "TESTCHECK" (CHECK_NUM, AMOUNT, INVH_CODE) VALUES ('002', '100', '1234');
查询1 :
SELECT check_num||decode(count(*), 1, null, '*') check_num, min(amount), min(invh_code)
from testcheck
group by check_num
order by check_num
<强> Results 强>:
| CHECK_NUM | MIN(AMOUNT) | MIN(INVH_CODE) |
|-----------|-------------|----------------|
| 001* | 50 | 1123 |
| 002 | 100 | 1234 |