Предполагая, что ваш стол, как так (я добавил имена столбцов):
A | B | C | D
------------+---+----------+------
Same values | 1 | 20130101 | City1
Same values | 2 | 20130102 | City2
Same values | 3 | 20130103 | City3
Ваш запрос будет:
SELECT A,
MAX(CASE WHEN B = 1 THEN C END) C1,
MAX(CASE WHEN B = 1 THEN D END) D1,
MAX(CASE WHEN B = 2 THEN C END) C1,
MAX(CASE WHEN B = 2 THEN D END) D1,
MAX(CASE WHEN B = 3 THEN C END) C1,
MAX(CASE WHEN B = 3 THEN D END) D1
FROM T
GROUP BY A;
Example On SQL Fiddle
Что дает:
A | C1 | D1 | C1 | D1 | C1 | D1
-------------+-----------+--------+----------+--------+----------+--------
Same values | 20130101 | City1 | 20130102 | City2 | 20130103 | City3
Насколько я знаю, SQLite не поддерживает динамический SQL, поэтому, если вы не знаете, сколько столбцов вам потребуется до запуска, вам нужно будет создать запрос на уровне приложения, а затем отправить его в базу данных.
Таким образом, вы должны были бы получить максимальное значение B:
SELECT MAX(B) B FROM T;
Затем цикл через 1 до максимального значения В (я не знаю, какой язык вы используете, но в C# как это это то, что я использую сегодня):
var sb = new StringBuilder();
var template = ", MAX(CASE WHEN B = {0} THEN C END) C{0}, MAX(CASE WHEN B = {0} THEN D END) D{0}";
sb.Append("SELECT A");
for (int i = 1; i < MaxB; i++) {
sb.Append(string.Format(template, i);
}
sb.Append(" FROM T GROUP BY A");
С переменным числом столбцов? № –
Есть сотни вариантов этого вопроса с ответами, если вы ищете SO для [PIVOT SQLite] (http://stackoverflow.com/search?q=Pivot+SQLite). Вы должны быть в состоянии найти то, что вам нужно там. – GarethD
Нет ... Я знаю, что переменные невозможны. Это просто пример, объясняющий мою проблему. – Niklas