我的SQLite表名称是“发票”,具有“零件号”和“制造商”列。
我的问题是以这种方式查询表,使其仅显示零件号至少具有2个不同的唯一制造商的记录。
我研究了整个流量栈,并尝试了此解决方案
QString Filter = "PART_NUMBER in (select PART_NUMBER FROM Invoices GROUP BY "
"PART_NUMBER HAVING count(PART_NUMBER)>1)";
model->setFilter(Filter);
model->select();
但是此解决方案的问题是它还显示具有相同制造商的部件号。
编辑:
在此示例中,它应该仅返回第2部分
答案 0 :(得分:2)
您需要计算Manufacturer
:
select PART_NUMBER FROM Invoices GROUP BY "
"PART_NUMBER HAVING count(MANUFACTURER)>1
好的,所以您说您的数据如下所示:
PART_NUMBER | MANUFACTURER
1 | A
2 | A
2 | A (duplicate entry)
3 | A
3 | B
4 | A
4 | B
然后,您需要选择HAVING COUNT(DISTINCT(MANUFACTURER))
。
在sqlite中,这看起来有点复杂:
SELECT COUNT(MANUFACTURER) FROM (SELECT DISTINCT MANUFACTURER FROM Table WHERE ...);
请参见this blog post。
但这远远超过QSqlQueryModel使用setFilter(...)
所能做的。
此问题看起来像数据库设计问题。您知道database normalization吗?
对表进行规范化后,问题将大大简化。