|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
Здравствуйте, есть таблица в firebird данные| дата string1 |01.01.2015 string2 | 04.03.2015 string3 | 17.06.2015 string4 | 09.03.2015 string5 | 25.04.2015 string6 | 25.03.2015 Данные выводятся в word таблицу Как получить на выходе Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Декабрь string1 string2 string5 string3 string4 string6 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 19:33 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
Перейти из ворда в эксель и использовать cross tab. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 19:35 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПерейти из ворда в эксель и использовать cross tab. Мне нужно sql запросом распределить данные по месяцам ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 20:57 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
Serega325, CASE ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 21:12 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
ну создайте колонку `my` и кидайте туда 215,315,415 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 23:50 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
tip78, если бы были не строки а числовые агрегаты - то можно было бы обойтись case или iif. А так похоже что без процедуры не выйдет. или без промежуточной таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 05:02 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
Симонов ДенисSerega325, CASE Тут похоже проблема не в CASE, а в том как раскидать несколько строк для одного месяца в разные записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 05:03 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
Вобщем примерно так вышло, вероятно можно упростить или обойтись без СП. Это чисто как демонстрация идеи. Таблица и данные: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Промежуточная процедура, в ней добавляем номер месяца и номер строки в месяце. Код: plsql 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.
Ну и собственно вот так получаем данные: Код: plsql 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.
Результат, как и требовалось: R M01_____ M02_____ M03_____ M04_____ M05_____ M06_____ M07_____ M08_____ M09_____ M10_____ M11_____ M12_____1 string 1 string 2 string 5 string 3 2 string 4 3 string 6 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 06:13 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
frakstip78, если бы были не строки а числовые агрегаты - то можно было бы обойтись case или iif. А так похоже что без процедуры не выйдет. или без промежуточной таблицы. да это обычная статистика по месяцам, какие нафиг case её вообще можно было сделать внутри пхп да и внутри SQL делается элементарно а тут грабля на грабле, нафига спрашивается понадобилась вам 'm' вообще? сделали зачем-то вместо лёгкого TINYINT - VARCHAR ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 09:40 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
tip78frakstip78, если бы были не строки а числовые агрегаты - то можно было бы обойтись case или iif. А так похоже что без процедуры не выйдет. или без промежуточной таблицы. да это обычная статистика по месяцам, какие нафиг case её вообще можно было сделать внутри пхп да и внутри SQL делается элементарно а тут грабля на грабле, нафига спрашивается понадобилась вам 'm' вообще? сделали зачем-то вместо лёгкого TINYINT - VARCHAR Такое ощущение что вы отвечаете на вопросы из какой-то другой ветки. - Какая картинка с другого сайта?? - Кто сказал что в задаче присутствует ПХП? - Какая статистика если в задаче тип данных - string? - TINYINT - это вы про MySQL или про что? В Firebird нет такого типа данных. - вопрос про m - это мне что-ли? Который m вас интересует? - не затруднит ли вас привести свой элементарный пример решения исходной задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 13:56 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
я уже написал решение вот его таблица Serega325данные| дата string1 |01.01.2015 string2 | 04.03.2015 string3 | 17.06.2015 string4 | 09.03.2015 string5 | 25.04.2015 string6 | 25.03.2015 и ему надо вывести их в word-таблицу в таком виде: Код: plsql 1. 2. 3. 4.
суть одна, что ПХП, что word - форматированием заниматься будут они, главное данные достать ну так вот добавляется колонка `my` (MonthYear): 115 315 615 315 415 315 (это если по годам всё-таки надо разделять, а то можно и выкинуть 15) а потом GROUP BY `my` и всё а вы там нагородили какие-то процедуры, функции, циклы жесть ( хайлодеры рекомендуют: в sql всё должно быть просто, без сложных запросов. Сложные запросы надо разбивать на простые. Городить лишнего не надо. БД - самое узкое место ВСЕГДА, помните об этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 14:26 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
но это 1 вариант, есть и другой, нормальный, когда дата это DATA и можно через DATE_FORMAT() вытаскивать месяц ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 14:33 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
*DAT E ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 14:37 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
tip78, Осталось только придумать, как group by сделает кросс-таб. Хотя, после фразы «БД - самое узкое место ВСЕГДА»© я не уверен, что можно еще что-то придумать. И - да, это форум о файрберд. Привычки с мускля здесь не в кассу. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 15:06 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
tip78 я уже написал решение Это не решение, это просто направление в котором как вам кажется находится решение. Но вам кажется неверно. Подтверждением правоты может быть рабочий запрос на SQL. tip78суть одна, что ПХП, что word - форматированием заниматься будут они, Я не знаю какой смысл вы вкладываете в слово "форматирование". В рассматриваемом случае Данные - это строки. Там нечего форматировать. Исходная задача состоит в том что бы достать запросом прямоугольную таблицу данных, уже развернутую по полям месяцев. Сам я таким не увлекаюсь, для такой цели у меня в клиенте написана своя прокладка которая по данным из процедуры аналогичной TEST1 автоматом разворачивает колонки в ширину в моем "датасете". Однако бывают такие условия когда клиента просто нет (например это IBExpert или isql или просто окошко в программе для выполнения непредусмотренных запросов), и выполнить задачу чисто средствами SQL - это бывает удобно. tip78главное данные достать ну так вот добавляется колонка `my` (MonthYear): 115 315 615 315 415 315 (это если по годам всё-таки надо разделять, а то можно и выкинуть 15) а потом GROUP BY `my` и всё колонку, т.е. поле в таблицу можно не добавлять ибо оно элементарно вычисляется из даты встроенной в Firebird функцией, и в моем коде эта функция приведена и достает как раз месяц. Можно обойтись и кастом, и подстрокой... масса вариантов. И сгруппировать по этому вычисленному полю можно, если бы это было нужно. GROUP BY подразумевает что какие-то поля обрабатываются агрегатной функцией. Вам видимо кажется что сделать SUM() по строковому полю - это хорошая идея. Но смысла в ней - ноль. tip78хайлодеры рекомендуют: в sql всё должно быть просто, без сложных запросов. Сложные запросы надо разбивать на простые. Городить лишнего не надо. БД - самое узкое место ВСЕГДА, помните об этом. Просто написать на SQL - это не просто :) Уровень допустимой сложности у каждого свой. На мой взгляд мое решение не относится к сложным, оно вполне доступно для понимания, отладки и сопровождения. И скорее всего его можно улучшить и написать более изящно. Как хайлодеру скажу, что в жизни есть БД и в иных местах чем на хостинге под MySQL и PHP. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 17:28 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
Главный недостаток моего решения - наличие процедуры. На боевой базе обычно это недопустимое решение. Наверняка можно от нее избавиться, но интерес уже пропал. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 17:37 |
|
распределение данных по месяцам
|
|||
---|---|---|---|
#18+
fraksВобщем примерно так вышло, вероятно можно упростить или обойтись без СП. Это чисто как демонстрация идеи. Таблица и данные: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Промежуточная процедура, в ней добавляем номер месяца и номер строки в месяце. Код: plsql 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.
Ну и собственно вот так получаем данные: Код: plsql 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.
Результат, как и требовалось: R M01_____ M02_____ M03_____ M04_____ M05_____ M06_____ M07_____ M08_____ M09_____ M10_____ M11_____ M12_____1 string 1 string 2 string 5 string 3 2 string 4 3 string 6 Спасибо огромное. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 22:56 |
|
|
start [/forum/topic.php?fid=40&msg=39202147&tid=1562269]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 161ms |
0 / 0 |