选择一个没有条件的行说

时间:2014-07-22 02:20:39

标签: mysql

我知道标题没有意义,我不知道怎么改写它。 所以这就是我现在所面对的。我有一张桌子,一张大桌子,它有近2M行。这是表格,已经按NoRegis=1411940Jumlah>0

进行过滤
|| Kode || Nama || Kali || Hari || Resep || Jumlah ||
++======++======++======++======++=======++========++
||AL-128||SP 5  ||      ||      ||A      ||5.00    ||
||AL-132||SP 10 ||      ||      ||A      ||3.00    ||
||AL-132||SP 10 ||      ||      ||A      ||7.00    ||
||DS-074||PARACE||3     ||1     ||R      ||10.00   ||
||DS-119||ASP 81||1     ||1     ||R      ||5.00    ||
||AL-242||VEN 2 ||      ||      ||A      ||1.00    ||
||AL-242||VEN 2 ||      ||      ||R      ||1.00    ||

我想要的结果只包含具有Resep =' R'的数据。像这样:

|| Kode || Nama || Kali || Hari || Resep || Jumlah ||
++======++======++======++======++=======++========++
||DS-074||PARACE||3     ||1     ||R      ||10.00   ||
||DS-119||ASP 81||1     ||1     ||R      ||5.00    ||

看,最后一个数据(AL-242)有两行,包括Resep =' R'和Resep =' A',我尝试过像

这样简单的事情
SELECT Kode,Nama,Kali,Hari,Resep,sum(Jumlah) FROM Frm_Ranap 
where NoRegis=1411940 and Jumlah>0 and resep<>'A' GROUP by Kode

但我仍然有AL-242,不应该在那里。我也试过像

这样的东西
SELECT Kode,Nama,Kali,Hari,Resep,sum(Jumlah) FROM Frm_Ranap 
WHERE kode not in (
select Kode FROM Frm_Ranap WHERE NoRegis=1411940 and Jumlah>0 and Resep='A') 
and NoRegis=1411940 and Jumlah>0 GROUP by Kode

但每次我尝试运行此查询时,它都不会向我显示任何结果,也无法停止工作,可能是因为它有太多数据。

任何消化?

4 个答案:

答案 0 :(得分:0)

让我们坚持第一个返回的查询。您只需将A上的条件移至having子句而不是where子句:

SELECT Kode, Nama, Kali, Hari, Resep, sum(Jumlah)
FROM Frm_Ranap 
WHERE NoRegis = 1411940 and Jumlah > 0 
GROUP by Kode
HAVING sum(resep = 'A') = 0;

having表达式计算每个组中的行数(即每个kode)与条件匹配的行数。 = 0指定组中没有此类行。

答案 1 :(得分:0)

您首先选择所有不具备您想要的内容的行:

SELECT Kode FROM Frm_Ranap where resep<>'R' GROUP by Kode

然后你选择你想要的,但不是第一个选择的那些:

SELECT Kode,Nama,Kali,Hari,Resep,sum(Jumlah) FROM Frm_Ranap where NoRegis=1411940 and Jumlah>0 and Kode not in (SELECT Kode FROM Frm_Ranap where resep<>'R' GROUP by Kode) group by Jumlah

答案 2 :(得分:0)

我认为这可能会对你有所帮助

SELECT Kode,Nama,Kali,Hari,Resep,sum(Jumlah) 
FROM Frm_Ranap 
WHERE NoRegis=1411940 
AND Jumlah>0 
AND resep<>'A' 
AND SUBSTRING(Kode, 1, 2) != 'AL'
GROUP by Kode

SUBSTRING(Kode,1,2)!='AL'将过滤您想要消除的记录

答案 3 :(得分:0)

您可以使用not exists选择kode没有Resep类型A的{​​{1}}。通常,当子查询返回大的结果集并且表格被正确编入索引时,not existsnot in快。

select Kode,Nama,Kali,Hari,Resep,sum(Jumlah) 
from Frm_Ranap t1
where NoRegis=1411940 and Jumlah>0 and Resep <> 'A' 
and not exists (select 1 from Frm_Ranap t2
where t2.Kode = t1.Kode and t2.Resep = 'A'
and t2.NoRegis = 1411940 and t2.Jumlah > 0)
group by Kode

此查询可以利用(NoRegis,Kode,Resep,Jumlah)

上的综合索引