2016-12-06 4 views
1

У меня есть следующая таблица в базе данных SQLiteкак ссылаться на результате в подзапросе

+----+-------------+-------+ 
| ID | Week Number | Count | 
+----+-------------+-------+ 
| 1 |   1 | 31 | 
| 2 |   2 | 16 | 
| 3 |   3 | 73 | 
| 4 |   4 | 59 | 
| 5 |   5 | 44 | 
| 6 |   6 | 73 | 
+----+-------------+-------+ 

Я хочу, чтобы получить следующую таблицу из. Где я получаю продажи в этом месяце как один столбец, а затем следующий столбец будет продаваться в прошлые недели.

+-------------+-----------+-----------+ 
| Week Number | This_Week | Last_Week | 
+-------------+-----------+-----------+ 
|   1 |  31 | null  | 
|   2 |  16 | 31  | 
|   3 |  73 | 16  | 
|   4 |  59 | 73  | 
|   5 |  44 | 59  | 
|   6 |  73 | 44  | 
+-------------+-----------+-----------+ 

Это оператор выбора я собирался использовать:

select 
    id, week_number, count, 
    (select count from tempTable 
    where week_number = (week_number-1)) 
from 
    tempTable; 

ответ

1

Вы сравнения значений в двух разных строках. Когда вы просто пишете week_number, база данных не знает, какой из них вы имеете в виду.

Чтобы обратиться к столбцу в определенной таблице, вы должны указать его имя таблицы: tempTable.week_number.

И если обе таблицы имеют одинаковые имена, вы должны переименовать по крайней мере один из них:

SELECT id, 
     week_number, 
     count AS This_Week, 
     (SELECT count 
     FROM tempTable AS T2 
     WHERE T2.week_number = tempTable.week_number - 1 
     ) AS Last_Week 
FROM tempTable; 
0

В случае, если вы хотите принять запрос, на одной и той же таблицы дважды, вы должны поставить псевдонимы на исходном и его тиражированном для их дифференциации

select a.week_number,a.count this_week, 
     (select b.count from tempTable b 
     where b.week_number=(a.week_number-1)) last_week 
    from tempTable a; 
Смежные вопросы