我在这里使用了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 ||
见图片
答案 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;