如果标题不代表问题,我很抱歉,因为我不是英语母语人士而且我不知道如何命名这种情况。标题推荐表示赞赏。
我有以下查询
SELECT mp.PerTPay,bz.BizCode,bz.BizName,count(*) PerCount FROM tb_perbiz bz
LEFT JOIN ms_per mp ON BizCode=mp.PerBiz
GROUP BY bz.BizCode,mp.PerTPay
ORDER BY bz.BizCode,mp.PerTPay
产生结果
PerTPay BizCode BizName PerCount
1 01 AAAAA 2
1 02 BBBBB 9
1 03 CCCCC 66
2 03 CCCCC 83
1 04 DDDDD 57
2 04 DDDDD 103
但以下是我想要的结果。我想要为每个BizCode显示所有可能的PerTPay(包括1和2)。
PerTPay BizCode BizName PerCount
1 01 AAAAA 2
2 01 AAAAA 0
1 02 BBBBB 9
2 02 BBBBB 0
1 03 CCCCC 66
2 03 CCCCC 83
1 04 DDDDD 57
2 04 DDDDD 103
这些是我的表
"ms_per"
PerCode PerBiz PerTPay
0001 01 1
0002 01 1
0003 02 1
0004 02 2
and so on
"tb_perbiz"
BizCode BizName
01 AAAAA
02 BBBBB
03 CCCCC
04 DDDDD
我无法将查询的主表更改为ms_per,因为我显示的查询从一个非常大的查询中减少,它主要依赖于tb_perbiz
答案 0 :(得分:1)
通常,要在结果中获得特定组合,您需要先生成该组合。如果您将数据与包含PerTPay
的所有允许值的表联接,则可以执行此操作 - 这实际上与您加入tb_perbiz
- 表的原因基本相同:包含的表BizCode
的所有允许值。这确保您获得每个代码,即使它在ms_per
中不存在。否则,您只能将表格ms_per
分组。
由于您只有两个值,因此可以动态生成该表:
SELECT pt.PerTPay, bz.BizCode, max(bz.BizName) as BizName,
count(mp.PerCode) PerCount
FROM tb_perbiz bz
CROSS JOIN (select 1 as PerTPay union select 2) pt
LEFT JOIN ms_per mp ON bz.BizCode=mp.PerBiz and mp.PerTPay = pt.PerTPay
GROUP BY bz.BizCode,pt.PerTPay
ORDER BY bz.BizCode,pt.PerTPay;
cross join
将为您提供所有可能的组合,它们是否存在于ms_per
中。
请注意,分组现在已在新的"表"上完成,我将count(*)
更改为count(mp.PerCode)
,以确保仅计算ms_per
中的现有行}。我还向BizName
(max(bz.BizName)
)添加了一个聚合函数,因为它不是group by
的一部分(尽管我猜BizCode
无论如何都是你的主键)。< / p>
虽然我在这里使用子查询动态生成表,但您可能想要添加一个实际的表(如果您还没有这样的表,例如在外键中使用它)。它将例如允许您在那里简单地添加3
,您的查询和所有类似的查询将产生预期的新结果,而不会更改任何查询代码。
答案 1 :(得分:0)
试试这个:
public static String getImageFromBytesTemp() {
File file = new File(Environment.getExternalStorageDirectory(), "nature2.jpg");
if (file.exists()) {
file.delete();
}
try {
FileOutputStream fos=new FileOutputStream(file.getAbsolutePath());
fos.write(bMapArray);
fos.close();
}
catch (IOException e) {
e.printStackTrace();
}
return file.getAbsolutePath();
}
它不会准确地为您提供您所呈现的行布局,但它会在不同的列中为您提供PerTPay 1和PerTPay 2的计数 - 所以基本上您获得的信息相同但格式略有不同