Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

SQL. Почему оператор CASE не работает?

Celtic Hammer Мудрец (16429), на голосовании 2 месяца назад
Всё практически по уроку с картинки внизу
 import sqlite3 as sq 

with sq.connect("test12.db") as con:
cur = con.cursor()

cur.execute("DROP TABLE IF EXISTS users2")

cur.execute("""CREATE TABLE IF NOT EXISTS users2 (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
surname TEXT,
age INTEGER,
limit_ TEXT
)
""")

cur.execute("INSERT INTO users2 (id,name,surname, age, limit_) VALUES (NULL, 'Иван','Самарин', 67,'')")
cur.execute("INSERT INTO users2 (id,name,surname, age, limit_) VALUES (NULL, 'Алесандр','Синицин', 41,'')")
cur.execute("INSERT INTO users2 (id,name,surname, age, limit_) VALUES (NULL, 'Григорий','Петров', 36,'')")
cur.execute("INSERT INTO users2 (id,name,surname, age, limit_) VALUES (NULL, 'Федор','Васильев', 10,'')")

cur.execute("""
SELECT name, surname, age, limit_
CASE
WHEN age > 40 THEN 'age > 40'
WHEN age < 40 THEN 'age < 40'
END limit_
FROM users2
""")
sqlite3.OperationalError: near "CASE": syntax error
В первоисточнике так ==>
Дополнен 3 месяца назад
А... Понял как это устроено...
cur.execute("""CREATE TABLE IF NOT EXISTS users2 (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
surname TEXT,
age INTEGER
)
""")

cur.execute("INSERT INTO users2 (id,name,surname, age) VALUES (NULL, 'Иван','Самарин', 67)")
cur.execute("INSERT INTO users2 (id,name,surname, age) VALUES (NULL, 'Алесандр','Синицин', 41)")
cur.execute("INSERT INTO users2 (id,name,surname, age) VALUES (NULL, 'Григорий','Петров', 36)")
cur.execute("INSERT INTO users2 (id,name,surname, age) VALUES (NULL, 'Федор','Васильев', 10)")

cur.execute("""
SELECT *,
CASE
WHEN age > 40 THEN 'age > 40'
WHEN age < 40 THEN 'age < 40'
END limit_
FROM users2
""")
result = cur.fetchall()
for i in result:
print(i)

Получили
(1, 'Иван', 'Самарин', 67, 'age > 40')
(2, 'Алесандр', 'Синицин', 41, 'age > 40')
(3, 'Григорий', 'Петров', 36, 'age < 40')
(4, 'Федор', 'Васильев', 10, 'age < 40')
Голосование за лучший ответ
Sergio 2.1 Оракул (65987) 3 месяца назад
 SELECT name, surname, age, 
CASE
WHEN age > 40 THEN 'age > 40'
WHEN age < 40 THEN 'age < 40'
ELSE 'age = 40'
END AS limit_
FROM users2
Похожие вопросы