|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
Добрый вечер всем. У меня есть запрос SQL, который возвращает несколько строк вида: ФИО Сумма Месяц Иванов И.И. 100 Январь Иванов И.И. 200 Февраль Иванов И.И. 300 Март Иванов И.И. 400 Апрель Как мне объединить строки, таким образом, чтобы значения поля "сумма " и "месяц" были перечислены через запятую в одну строку? Например: Иванов И.И Платежи: Январь - 100, Февраль - 200, Март - 300, Апрель - 400... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2010, 18:38 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
НадеждаМ, /topic/715274&hl= ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2010, 18:41 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
В самом отчете эти поля можно как-то расположить в одну строку или только в SQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2010, 18:52 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
НадеждаМ, а что мешает построить отчет на основании sql запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2010, 19:01 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
Местами администратор, В принципе так оно и есть, единственная проблема вот осталась....никак не получается сформировать строку нужного вида. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2010, 19:09 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
Посмотрела предложенную страницу, но не получается у меня так как там. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2010, 20:27 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
НадеждаМ, тогда структура и наименование исходных таблиц, че-нить придумаем ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2010, 20:27 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
НадеждаМВ самом отчете эти поля можно как-то расположить в одну строку или только в SQL? Можно. Через переменные отчета. Т.е. создается группировка по ФИО и переменная отчета примерно такого вида (значение Value to Store). FirstVar = FirstVar + MyTab.Month + " - " + TransForm(MyTab.Summa) У этой переменной устанавливается значение Init Value равное пустой строке, "Reset Value" по данной группировке В таком отчете деталировка вообще не печатается (опция SUMMARY в команде REPORT FORM), а сформированное значение переменной выводится в Group Footer. Другими словами, чтобы сформировать строку отчет должен перебать нужные записи. Надо только подавить отображение тех записей, которые он перебирает. Разумеется, это все будет работать только в том случае, если ФИО не смешаны в кучу, а идут строго друг за другом. Только лучше все-таки сформировать курсор нужной структуры в отдельной процедуре. Проблема в том, что отчет "не прозрачен" с точки зрения его возможной модификации. Т.е. очень сложно понять "кто на ком стоял", если по разным углам отчета разбросаны фрагменты кода ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2010, 20:36 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
ВладимирМНадеждаМВ самом отчете эти поля можно как-то расположить в одну строку или только в SQL? Можно. Через переменные отчета. Т.е. создается группировка по ФИО и переменная отчета примерно такого вида (значение Value to Store). FirstVar = FirstVar + MyTab.Month + " - " + TransForm(MyTab.Summa) У этой переменной устанавливается значение Init Value равное пустой строке, "Reset Value" по данной группировке В таком отчете деталировка вообще не печатается (опция SUMMARY в команде REPORT FORM), а сформированное значение переменной выводится в Group Footer. Другими словами, чтобы сформировать строку отчет должен перебать нужные записи. Надо только подавить отображение тех записей, которые он перебирает. Разумеется, это все будет работать только в том случае, если ФИО не смешаны в кучу, а идут строго друг за другом. Только лучше все-таки сформировать курсор нужной структуры в отдельной процедуре. Проблема в том, что отчет "не прозрачен" с точки зрения его возможной модификации. Т.е. очень сложно понять "кто на ком стоял", если по разным углам отчета разбросаны фрагменты кода красиво (мозг взорван) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2010, 20:39 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
select fio, mes; sum(iif(alltr(mes)='январь',summa,0)) as mes1; sum(iif(alltr(mes)='февраль',summa,0)) as mes2; sum(iif(alltr(mes)='март',summa,0)) as mes3; sum(iif(alltr(mes)='апрель',summa,0)) as mes4; sum(iif(alltr(mes)='май',summa,0)) as mes5; sum(iif(alltr(mes)='июнь',summa,0)) as mes6; sum(iif(alltr(mes)='июль',summa,0)) as mes7; sum(iif(alltr(mes)='август',summa,0)) as mes8; sum(iif(alltr(mes)='сентябрь',summa,0)) as mes9; sum(iif(alltr(mes)=октябрь',summa,0)) as mes10; sum(iif(alltr(mes)='ноябрь',summa,0)) as mes11; sum(iif(alltr(mes)='декабрь',summa,0)) as mes12; from Mytable; group by fio следует заметить, фио - может иметь не уникльные значения, в иделе должно быть поле, содержащее уникльный номер физ.лица, назовем это поле un, и будем надеяться, что информаци только за один год, тогда select fio, mes; sum(iif(alltr(mes)='январь',summa,0)) as mes1; sum(iif(alltr(mes)='февраль',summa,0)) as mes2; sum(iif(alltr(mes)='март',summa,0)) as mes3; sum(iif(alltr(mes)='апрель',summa,0)) as mes4; sum(iif(alltr(mes)='май',summa,0)) as mes5; sum(iif(alltr(mes)='июнь',summa,0)) as mes6; sum(iif(alltr(mes)='июль',summa,0)) as mes7; sum(iif(alltr(mes)='август',summa,0)) as mes8; sum(iif(alltr(mes)='сентябрь',summa,0)) as mes9; sum(iif(alltr(mes)=октябрь',summa,0)) as mes10; sum(iif(alltr(mes)='ноябрь',summa,0)) as mes11; sum(iif(alltr(mes)='декабрь',summa,0)) as mes12; from Mytable; group by un вобщем как-то так ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2010, 21:05 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
Местами администратор, Попробовала, но у меня ошибку пишет 'Msg 102, Level 15, State 1, Procedure mn_pdn, Line 37 Incorrect syntax near '='.' ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2010, 11:57 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
Спешил, вот этот код работает CREATE CURSOR myTab (un i(4), fio c(30), rub n(10,2), mes c(15)) SELECT myTab APPEND BLANK REPLACE un WITH 1, fio WITH 'Иванов', rub WITH 30, mes WITH 'январь' APPEND BLANK REPLACE un WITH 1, fio WITH 'Иванов', rub WITH 30, mes WITH 'февраль' APPEND BLANK REPLACE un WITH 1, fio WITH 'Иванов', rub WITH 30, mes WITH 'январь' APPEND BLANK REPLACE un WITH 1, fio WITH 'Иванов', rub WITH 30, mes WITH 'апрель' APPEND BLANK REPLACE un WITH 1, fio WITH 'Иванов', rub WITH 30, mes WITH 'февраль' APPEND BLANK REPLACE un WITH 1, fio WITH 'Иванов', rub WITH 30, mes WITH 'январь' select fio, mes, un,; sum(iif(alltr(mes)='январь',rub,0)) as mes1,; sum(iif(alltr(mes)='февраль',rub,0)) as mes2,; sum(iif(alltr(mes)='март',rub,0)) as mes3,; sum(iif(alltr(mes)='апрель',rub,0)) as mes4; from myTab; group by un, fio, mes ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2010, 13:29 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
сам запрос видимо нужен такой: select fio, un,; sum(iif(alltr(mes)='январь',rub,0)) as mes1,; sum(iif(alltr(mes)='февраль',rub,0)) as mes2,; sum(iif(alltr(mes)='март',rub,0)) as mes3,; sum(iif(alltr(mes)='апрель',rub,0)) as mes4; from myTab; group by un, fio ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2010, 13:32 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
автор топика просит кросстаблицу, поиском может найти что это такое и как это делается как вариант руками для 9-й версии фокспро Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2010, 14:43 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
прошелмимо, Шахматка формируется в excel: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2010, 16:55 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
НадеждаМДобрый вечер всем. У меня есть запрос SQL, который возвращает несколько строк вида: ФИО Сумма Месяц Иванов И.И. 100 Январь Иванов И.И. 200 Февраль Иванов И.И. 300 Март Иванов И.И. 400 Апрель Как мне объединить строки, таким образом, чтобы значения поля "сумма " и "месяц" были перечислены через запятую в одну строку? Например: Иванов И.И Платежи: Январь - 100, Февраль - 200, Март - 300, Апрель - 400... data: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2010, 16:59 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
авторпрошелмимо, Шахматка формируется в excel: а мне какая разница? я разве против был? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2010, 17:44 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
прошелмимоавторпрошелмимо, Шахматка формируется в excel: а мне какая разница? я разве против был? Все отчеты у которых количество столбцов не постоянное число стараюсь выводить в excel, при этом делаю шапку и итоги,а как распечатать эту excel-таблицу(ужать в один лист ...) решает бухгалтер(молодой). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2010, 09:18 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
Добрый день. Всем спасибо за интересные советы, но я решила сделать по своему: Сначала делаю в процедуре запрос, который выбирает нужную информацию по человеку, а затем вот таким образом получаю в одну строкуДату (месяц) - Сумму: alter procedure mn2 as begin select uin, surname, name, secname from table_2 where uin=1 declare @str1 varchar(50), @str2 varchar(50), @str3 varchar(1000) set @str3='' declare curs cursor local for select Table_2.mon, Table_2.summ from Table_2 open curs fetch next from curs into @str1, @str2 WHILE @@FETCH_STATUS =0 BEGIN set @str3=@str3+', '+ @str1+' - '+@str2 fetch next from curs into @str1, @str2 END close curs DEALLOCATE curs select @str3 end В итоге получается что первый запрос выдает ФИО "Иванов", а в @str3 оказывается строка "Январь - 100 руб, Февраль 200 - руб, Март - 300 руб, Апрель - 400 руб". Вот только не пойму как @str3 в отчет передать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2010, 09:45 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
НадеждаМДобрый день. Всем спасибо за интересные советы, но я решила сделать по своему:. ;)) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2010, 09:51 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
НадеждаМДобрый день. Всем спасибо за интересные советы, но я решила сделать по своему: в транзакте это делается одним запросом без курсоров. Вы нагородили ерунды, извиняюсь, почитайте форум ms-sql ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2010, 10:00 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
читать вдумчиво: http://www.sql.ru/faq/faq_topic.aspx?fid=130 http://sql.ru/forum/actualthread.aspx?tid=651991&hl=%e7%e0%ef%ff%f2%f3%fe+%f1%f2%f0%ee%ea%f3 /topic/614191&hl=xml и т.д. на эту тему + когда задаете вопрос, указывайте, что у Вас скл сервер и нужно решение в синтаксисе транзакта, а то нерод начал извращаться т.к. понять это было не возможно, задаете ребусы, затем умозаключаете и оглашаете, что вышли на собственную дорогу, странно.... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2010, 10:51 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
прошелмимоНадеждаМДобрый день. Всем спасибо за интересные советы, но я решила сделать по своему: в транзакте это делается одним запросом без курсоров. Вы нагородили ерунды, извиняюсь, почитайте форум ms-sql Извините, ерунда не ерунда, делаем как умеем, пока что. Я не асс в написании SQL запросов, и в foxpro тоже. Пока только изучаю. Все что тут написали мне очень даже пригодится. Все ваши Замечания учту обязательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2010, 11:31 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
НадеждаМДобрый день. Всем спасибо за интересные советы, но я решила сделать по своему: Сначала делаю в процедуре запрос, который выбирает нужную информацию по человеку, а затем вот таким образом получаю в одну строкуДату (месяц) - Сумму: alter procedure mn2 as begin select uin, surname, name, secname from table_2 where uin=1 declare @str1 varchar(50), @str2 varchar(50), @str3 varchar(1000) set @str3='' declare curs cursor local for select Table_2.mon, Table_2.summ from Table_2 open curs fetch next from curs into @str1, @str2 WHILE @@FETCH_STATUS =0 BEGIN set @str3=@str3+', '+ @str1+' - '+@str2 fetch next from curs into @str1, @str2 END close curs DEALLOCATE curs select @str3 end В итоге получается что первый запрос выдает ФИО "Иванов", а в @str3 оказывается строка "Январь - 100 руб, Февраль 200 - руб, Март - 300 руб, Апрель - 400 руб". Вот только не пойму как @str3 в отчет передать. Надежда, если у вас данные хранятся на SQL Server, то может имеет смысл отчет публиковать в Reporting Services. Если у вас версия сервера >= 2005, то этот продукт идет уже в поставке сервера. Если вернуться к вашему конкретному запросу, то мне кажется, что можно обойтись и без использования курсора (хотя если данных не очень много, то ничего страшного в его использования нет, но лучше использовать для вашего случая курсор static). Если вам надо сформировать кросстаблицу таблицу, т.е. строки первести в колонки, то можно использовать оператор PIVOT команды SELECT: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2010, 12:10 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
Все-таки можно как-то, то что находится в @str3 передать в отчет? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2010, 13:24 |
|
Вопрос по отчету Foxpro+SQL
|
|||
---|---|---|---|
#18+
Все-таки можно как-то, то что находится в @str3 передать в отчет совместно с тем, что запрос выдает? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2010, 13:25 |
|
|
start [/forum/topic.php?all=1&fid=41&tid=1585527]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 142ms |
0 / 0 |