SQLite Group By with Order By不工作

时间:2012-07-31 16:48:57

标签: iphone ios sqlite group-by

需要一些堆栈溢出的爱。阅读与分组和排序相关的其他问题,这些答案似乎对我不起作用。我对db语句的更精细细节并不十分强烈,并且认为组合和订单之间存在一些依赖或冲突我缺少的语句。

我有一个表(itemOptions),它包含项目的所有选项以及这些选项的所有可能值。考虑项目的多个选择/下拉框以及每个下拉列表的值列表。不幸的是,我无法更改数据库结构,因为Web服务提供了sqlite文件。

这是结构:

absTtemId    optionName    optionPosition  valueName  valuePosition
item1        size             1             small        1 
item1        size             1             medium       2 
item1        size             1             large        3 
item1        color            2             white        1 
item1        color            2             red          2 
item1        color            2             yellow       3 
item2        name             1             willis       1 
item2        name             1             smith        2 
item2        name             1             bowman       3

查询需要返回optionPosition排序的给定项的optionsNames,然后返回valueposition排序的每个选项的valueNames列表,如下所示

option   valueNames
size     small, medium, large
color    white, red, yellow

我可以通过选项获取valueNames的分组,但是当我尝试在任何地方添加排序时,sqlite会抛出错误。

这是我当前的sql语句,它返回这些结果,但是option和valueNames永远不会按顺序排列。

SELECT   optionName, group_concat(valueName) 
FROM     itemOptions  
WHERE    absItemId = 'item1' 
GROUP BY optionName

option   valueNames
size     medium, small, large
color    yellow, red, white

以下是我为valueName和optionName

添加排序的失败尝试
SELECT   optionName, group_concat(valueName ORDER BY valuePosition DESC) 
FROM     itemOptions  
WHERE    absItemId = 'item1' 
GROUP BY optionName

编辑:运动for optionName分组现在正在使用此功能。只有group_concat中的valueName排序不起作用。

SELECT   optionName, group_concat(valueName) 
FROM     itemOptions  
WHERE    absItemId = 'item1' 
GROUP BY optionName 
ORDER BY optionPosition

1 个答案:

答案 0 :(得分:1)

SELECT a.optionName, group_concat(a.valueName) 
FROM (SELECT * FROM itemOptions ORDER BY valuePosition ASC) As a
WHERE a.absItemId = 'item1' 
GROUP BY a.optionName
ORDER BY a.optionName