1

这里的标题有点令人困惑,我完全意识到,但这就是我想要完成的。我有一张表,其中有一列重复。

桌子看起来像这样。

    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" 

请注意,通过检查 001,我真的不在乎选择哪些列作为数量和 invh_code 何时重复。它必须是原始 dup 记录之一的一部分。

我已经能够获得独特的价值,但我不能做的是为我的一生弄清楚如何将星号放在那里。

这是我的查询。

 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';   

有人可以指出我正确的方向。我只是想识别在记录上加上星号的重复,然后只选择其中一个记录。

4

1 回答 1

1

SQL小提琴

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

结果

| CHECK_NUM | MIN(AMOUNT) | MIN(INVH_CODE) |
|-----------|-------------|----------------|
|      001* |          50 |           1123 |
|       002 |         100 |           1234 |
于 2013-09-07T05:35:14.073 回答