我可以删除Table1&中重复的行吗?表2?

时间:2018-03-20 07:16:48

标签: sql

我在这里使用了Left Join,Table1和Table2有1行
表3有2行。
所以输出就是这个 | .....................表1 .................... || ..... ...表2 .......... || .........表3 .......... ||
|的 ITEMNAME ........... |的品牌 ............ ||的 UOM | 数量 .. | 价格。|| UOM 。| 数量 .. | 价格< / strong>即可。||
|短债券| HARDCOPY || PCS | 500 | 1100 || PCS | 100 | 1550 ||
|短债券| HARDCOPY || PCS | 500 | 1100 || PCS | 100 | 2200 ||

我可以这样做吗

| .....................表1 .................... || ..表2 ...... .......... || .........表3 .......... ||
|的 ITEMNAME ........... |的品牌 ............ ||的 UOM | 数量 .. | 价格。|| UOM 。| 数量 .. | 价格< / strong>即可。||
|短债券| HARDCOPY || PCS | 500 | 1100 || PCS | 100 | 1550 ||
|短债券| HARDCOPY || -...... | 0 ..... | 0 ...... || PCS | 100 | 2200 ||


或者像这样?

| .....................表1 .................... || ..表2 ...... .......... || .........表3 .......... ||
|的 ITEMNAME ........... |的品牌 ............ ||的 UOM | 数量 .. | 价格。|| UOM 。| 数量 .. | 价格< / strong>即可。||
|短债券| HARDCOPY || PCS | 500 | 1100 || PCS | 100 | 1550 ||
| NULL ................... | NULL ............ || NULL | NULL | NULL || PCS | 100 | 2200 ||

见图片

2 个答案:

答案 0 :(得分:0)

加入的安排应如下所示:

#include <cstdio>
#include <vector>
#include <algorithm>
#include <utility>

int main(){

    typedef std::pair<int, int> pii;
    typedef std::vector< int > vi ;
    typedef std::vector< pii > vii;

    vi v = {7, 9, 7, 7, 9};

    //O( N log(N) )
    std::sort(v.begin(), v.end());


    vii vc;
    vc.reserve(v.size());

    // O (N)  make (cnt, value) pair of vector
    for(size_t i = 0; i != v.size(); ++i)
    {
        if (vc.empty() ||  v[i] != vc.back().second ){
           vc.push_back( pii(0, v[i]) ) ;
        }

        vc.back().first ++ ;
    }

    // O (N Log(N) )  sort by (cnt, value)
    std::sort( vc.begin(), vc.end() ) ;

    // O(N)   restore they, reverse order.
    v.clear();
    for(int i = 0; i < (int)vc.size(); ++i){
        int rev_i = vc.size() - i - 1;
        int cnt =  vc[rev_i].first;
        for(int k = 0; k < cnt; ++k)
          v.push_back( vc[rev_i].second ) ;
    }

    /////////////////////////

    for(size_t i = 0; i != v.size(); ++i){
        printf("%4d, ", v[i]);
    }
    printf("\n");
}

答案 1 :(得分:0)

由于没有实际数据和表格结构,因此无法提供实际查询。建议在查询中添加排名列,如

rank() over(partition by item_name, brand) 

并将所需列设置为NULL,如果rank&gt; 1;