powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос.
4 сообщений из 4, страница 1 из 1
Помогите составить запрос.
    #33116702
Фотография La_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть таблица:

Тип Количество Дата
Стол 20 пятн
Стол 14 сбт
Стул 1 пятн
Стул 67 Понед
Стул 11 Втор
Книга 7 пятн
Книга 90 сбт

Как с помощью одного только SQL превратить ее в такую?

Тип Стол Стул Книга Дата
Стол 20 0 0 пятн
Стол 14 0 0 сбт
Стул 0 1 0 пятн
Стул 0 67 0 понед
Стул 0 11 0 Втор
Книга 0 0 7 Пятн
Книга 0 0 90 сбт

Количество категорий ограниченно (5 штук максимум).
Мне мерещатся какие-то жуткие UNION WHERE type='стул'.
Подскажите?











Спасибо,
Саня
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #33117200
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чистым SQL-ем не сделать (если имелось в виду создание таблицы).

P.S.
ТипСтолСтулКнигаДатаСтол2000пятнСтол1400сбтСтул010пятнСтул0670понедСтул0110ВторКнига007ПятнКнига0090сбт

Правда смотрится приятнее?! :)

FAQ: Как мне оформить свое сообщение?
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #33117989
Astron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну по-человечески не получится. Если бы у MySQL было что-то типа оракловского словаря (чтобы колонки в переменных не хранить) то тогда было бы можно. А так - спасает только ограничение.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
mysql> create table t_1 (obj_type varchar( 10 ), obj_count int,day_of_week char( 3 ));
Query OK,  0  rows affected ( 0 . 13  sec)

mysql> insert into t_1 values ('table', 20 ,'FRI'), ('table', 14 ,'SAT'),('chair', 1 ,'FRI'),('chair', 67 ,'MON'),('book', 7 ,'FRI');
Query OK,  5  rows affected ( 0 . 03  sec)
Records:  5   Duplicates:  0   Warnings:  0 

mysql> select * from t_1;
+----------+-----------+-------------+
| obj_type | obj_count | day_of_week |
+----------+-----------+-------------+
| table    |         20  | FRI         |
| table    |         14  | SAT         |
| chair    |          1  | FRI         |
| chair    |         67  | MON         |
| book     |          7  | FRI         |
+----------+-----------+-------------+
 5  rows in set ( 0 . 00  sec)

mysql> select distinct obj_type into @type1 from t_1 limit  0 , 1 ;
Query OK,  1  row affected ( 0 . 05  sec)

mysql> select distinct obj_type into @type2 from t_1 limit  1 , 1 ;
Query OK,  1  row affected ( 0 . 00  sec)

mysql> select distinct obj_type into @type3 from t_1 limit  2 , 1 ;
Query OK,  1  row affected ( 0 . 00  sec)

mysql> select distinct obj_type into @type4 from t_1 limit  3 , 1 ;
Query OK,  0  rows affected,  1  warning ( 0 . 00  sec)

mysql> select distinct obj_type into @type5 from t_1 limit  4 , 1 ;
Query OK,  0  rows affected,  1  warning ( 0 . 00  sec)

mysql>
mysql> select @type1,@type2,@type3,@type4,@type5;
+--------+--------+--------+--------+--------+
| @type1 | @type2 | @type3 | @type4 | @type5 |
+--------+--------+--------+--------+--------+
| table  | chair  | book   | NULL   | NULL   |
+--------+--------+--------+--------+--------+
 1  row in set ( 0 . 00  sec)


mysql> select obj_type,
    -> IF(obj_type=@type1,obj_count, 0 ) as t_1,
    -> IF(obj_type=@type2,obj_count, 0 ) as t_2,
    -> IF(obj_type=@type3,obj_count, 0 ) as t_3,
    -> IF(obj_type=@type4,obj_count, 0 ) as t_4,
    -> IF(obj_type=@type5,obj_count, 0 ) as t_5,
    -> day_of_week
    -> from t_1;
+----------+------+------+------+------+------+-------------+
| obj_type | t_1  | t_2  | t_3  | t_4  | t_5  | day_of_week |
+----------+------+------+------+------+------+-------------+
| table    |    20  |     0  |     0  |     0  |     0  | FRI         |
| table    |    14  |     0  |     0  |     0  |     0  | SAT         |
| chair    |     0  |     1  |     0  |     0  |     0  | FRI         |
| chair    |     0  |    67  |     0  |     0  |     0  | MON         |
| book     |     0  |     0  |     7  |     0  |     0  | FRI         |
+----------+------+------+------+------+------+-------------+
 5  rows in set ( 0 . 00  sec)
Из последнего запроса можно сделать CREATE TABLE/VIEW если хочется.... Но как-то это все некрасиво...
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #33118362
Фотография La_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня такое получилось с помощью одного SELECT'a в 30 строчек.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
+----------+------+------+------+------+------+-------------+
| obj_type | t_1  | t_2  | t_3  | t_4  | t_5  | day_of_week |
+----------+------+------+------+------+------+-------------+
| table    |    20  |     0  |     0  |     0  |     0  | FRI         |
| table    |    14  |     0  |     0  |     0  |     0  | SAT         |
| chair    |     0  |     1  |     0  |     0  |     0  | FRI         |
| chair    |     0  |    67  |     0  |     0  |     0  | MON         |
| book     |     0  |     0  |     7  |     0  |     0  | FRI         |
+----------+------+------+------+------+------+-------------+

Но надо бы потом GROUP BY day_of_week и obj_type... А он не разрешает мне сделать

SELECT SUM(t_1), SUM(t_2) ,... FROM (страшный sql) GROUP BY day_of_week, obj_type

...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]