1

我有这张桌子:

id | CUPNAME | FRENCHNAME
1  | 2       | null
2  | null    | 4

我想从不为空的 CUPNAME 和 FRENCHNAME 中提取数据。表格可以填1到10的数字。在这个例子中,应该可以CUPNAME=2,FRENCHNAME=4。

有这样一个查询:

SELECT sum(ifnull(french_press_bd.CUPNAME,0)) as a , sum(ifnull(french_press_bd.FRENCHNAME,0)) as b FROM my_table WHERE id in (1,2)

我试着写,所以它不起作用:

 String sqr = "id in (1,2)";
Cursor cursor = sqdb.query(french_press_bd.TABLE_NAME, new String[] {                   
"sum(ifnull(french_press_bd.CUPNAME,0)) as a , sum(ifnull(french_press_bd.FRENCHNAME,0)) as b" 
},sqr, null,null,null,null );
4

2 回答 2

1

我认为您可以使用 rawQuery。作为:

String your_query= "SELECT sum(ifnull(french_press_bd.CUPNAME,0)) as a , sum(ifnull(french_press_bd.FRENCHNAME,0)) as b FROM my_table WHERE id in (1,2)";
Cursor result = sqdb.rawQuery(your_query, null);

但请确保SQLiteDatabase不是NULL. 你必须在它之前打电话,

sqdb = dbhelper.getReadableDatabase(); // or getWritableDatabase()
于 2013-10-31T18:10:34.617 回答
0

此查询使用两个标量子查询从相应列中获取第一个非 NULL 值:

SELECT (SELECT CUPNAME
        FROM my_table
        WHERE id IN (1, 2)
          AND CUPNAME IS NOT NULL
       ) AS CUPNAME,
       (SELECT FRENCHNAME
        FROM my_table
        WHERE id IN (1, 2)
          AND FRENCHNAME IS NOT NULL
       ) AS FRENCHNAME;

由于外部查询实际上并没有做任何事情,因此单独执行两个查询可能更简单:

long cName = db.compileStatement("SELECT CUPNAME FROM my_table" +
                                 " WHERE id IN (1, 2) AND CUPNAME IS NOT NULL"
                                ).simpleQueryForLong();
long fName = db.compileStatement("SELECT FRENCHNAME FROM my_table" +
                                 " WHERE id IN (1, 2) AND FRENCHNAME IS NOT NULL"
                                ).simpleQueryForLong();
于 2013-11-03T19:58:11.277 回答