2015-03-04 6 views
2

Я использую CFSpreadsheet для чтения файла .xls.Отличный QoQ автоматически применяет порядок по

Файл имеет около 3000 копий, которые я могу смело игнорировать, так я думал, что сделать select distinct сравнению с предыдущим кварталом, но когда я делаю это, результаты упорядочиваются, как будто order by col_1, col_2 был добавлен в запрос, который очень плохо.

<cfspreadsheet query = "qSheet" ...> 
<cfquery dbtype="query" name = "qDistinctSheet"> 
    select distinct 
      col_1 
     , col_2 
    from 
     qSheet 
</cfquery> 
<cfdump var = "#qDistinctSheet#"> 

Если удалить distinct я получить ожидаемые результаты, которые должны быть:

  1. [пустая строка]
  2. Имя
  3. Джон
  4. Джон
  5. Адам
  6. Стив
  7. Боб
  8. Боб

Когда я добавляю отчетливый я получаю

  1. [пустая строка]
  2. Адам
  3. Боб
  4. Джон
  5. Имя
  6. Стив

Любая идея, как предотвратить это нежелательное упорядоченность?

Редактировать

End решение применить номер строки и использовать группу, как это было предложено Мэтта и Дэна

<cfset ids = []> 
<cfloop query="qSheet"> 
    <cfset ids[qSheet.currentRow] = qSheet.currentRow> 
</cfloop> 
<cfset queryAddColumn(qSheet,"id",ids)> 
<cfquery dbtype="query" name="qDistinct"> 
    SELECT 
      col_1 
     , col_2 
     , min(ID) AS firstID 
    FROM 
     qSheet 
    GROUP BY  
     col_1 
     , col_2 
    ORDER BY 
     firstID 
</cfquery> 
+0

. Каков прецедент для того, чтобы их не заказывали - не знаете, почему это имеет значение при использовании 'distinct'. –

+0

Есть ли номер строки в вашем запросе cfspreadsheet? Если это так, вы можете заказать это. –

+0

@MattBusche, добавляющий отдельный идентификатор (или номер строки), вернет все строки – Travis

ответ

4

Вы можете использовать GROUP BY вариант вместо и использовать идентификатор строки из таблица запроса

<cfquery dbtype="query" name="qDistinct"> 
SELECT 
     col_1 
    , col_2 
    , min(ID) AS firstID 
FROM 
    qSheet 
GROUP BY  
    col_1 
    , col_2 
ORDER BY 
    firstID