powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос по отчету Foxpro+SQL
25 сообщений из 27, страница 1 из 2
Вопрос по отчету Foxpro+SQL
    #36500761
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер всем.

У меня есть запрос SQL, который возвращает несколько строк вида:
ФИО Сумма Месяц
Иванов И.И. 100 Январь
Иванов И.И. 200 Февраль
Иванов И.И. 300 Март
Иванов И.И. 400 Апрель

Как мне объединить строки, таким образом, чтобы значения поля "сумма " и "месяц" были перечислены через запятую в одну строку?

Например:

Иванов И.И

Платежи: Январь - 100, Февраль - 200, Март - 300, Апрель - 400...
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36500767
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМ,
/topic/715274&hl=
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36500795
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В самом отчете эти поля можно как-то расположить в одну строку или только в SQL?
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36500825
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМ,
а что мешает построить отчет на основании sql запроса?
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36500847
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Местами администратор,

В принципе так оно и есть, единственная проблема вот осталась....никак не получается сформировать строку нужного вида.
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36500981
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрела предложенную страницу, но не получается у меня так как там.
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36500982
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМ,
тогда структура и наименование исходных таблиц, че-нить придумаем
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36500998
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМВ самом отчете эти поля можно как-то расположить в одну строку или только в SQL?
Можно. Через переменные отчета.

Т.е. создается группировка по ФИО и переменная отчета примерно такого вида (значение Value to Store).

FirstVar = FirstVar + MyTab.Month + " - " + TransForm(MyTab.Summa)

У этой переменной устанавливается значение Init Value равное пустой строке, "Reset Value" по данной группировке

В таком отчете деталировка вообще не печатается (опция SUMMARY в команде REPORT FORM), а сформированное значение переменной выводится в Group Footer.

Другими словами, чтобы сформировать строку отчет должен перебать нужные записи. Надо только подавить отображение тех записей, которые он перебирает.

Разумеется, это все будет работать только в том случае, если ФИО не смешаны в кучу, а идут строго друг за другом.


Только лучше все-таки сформировать курсор нужной структуры в отдельной процедуре. Проблема в том, что отчет "не прозрачен" с точки зрения его возможной модификации. Т.е. очень сложно понять "кто на ком стоял", если по разным углам отчета разбросаны фрагменты кода
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36501007
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМНадеждаМВ самом отчете эти поля можно как-то расположить в одну строку или только в SQL?
Можно. Через переменные отчета.

Т.е. создается группировка по ФИО и переменная отчета примерно такого вида (значение Value to Store).

FirstVar = FirstVar + MyTab.Month + " - " + TransForm(MyTab.Summa)

У этой переменной устанавливается значение Init Value равное пустой строке, "Reset Value" по данной группировке

В таком отчете деталировка вообще не печатается (опция SUMMARY в команде REPORT FORM), а сформированное значение переменной выводится в Group Footer.

Другими словами, чтобы сформировать строку отчет должен перебать нужные записи. Надо только подавить отображение тех записей, которые он перебирает.

Разумеется, это все будет работать только в том случае, если ФИО не смешаны в кучу, а идут строго друг за другом.


Только лучше все-таки сформировать курсор нужной структуры в отдельной процедуре. Проблема в том, что отчет "не прозрачен" с точки зрения его возможной модификации. Т.е. очень сложно понять "кто на ком стоял", если по разным углам отчета разбросаны фрагменты кода

красиво (мозг взорван)
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36501046
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
вобщем как-то так
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36501941
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Местами администратор,

Попробовала, но у меня ошибку пишет
'Msg 102, Level 15, State 1, Procedure mn_pdn, Line 37
Incorrect syntax near '='.'
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36502283
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спешил, вот этот код работает
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
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36502293
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сам запрос видимо нужен такой:
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
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36502544
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор топика просит кросстаблицу,
поиском может найти что это такое и как это делается

как вариант руками для 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.
CREATE CURSOR myTab (un i( 4 ), fio c( 30 ), rub n( 10 , 2 ), mes c( 15 ))
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  30 , 'январь')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  20 , 'февраль')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  50 , 'март')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  60 , 'апрель')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  70 , 'май')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  10 , 'январь')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  90 , 'февраль')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  1200 , 'март')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  400 , 'апрель')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  60 , 'май')


Select un, fio, Cast(allplat(un) as c( 100 )) as allplat ;
		from myTab ;
		group by un, fio

Return 
		
Function allplat
Lparameters tlUn
local lcResult, lcValue 
select Alltrim(mes) + ' - ' + Transform(rub) ; 
	from myTab ; 
	where un=tlUn ;
	order by mes ;
	into array laArr 
lcResult = "" 
for each lcValue in laArr 
	lcResult = lcResult + iif(!empty(lcResult),",","") + alltrim(lcValue)
endfor 
return lcResult
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36503148
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо,
Шахматка формируется в 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.
CREATE CURSOR myTab (un i( 4 ), fio c( 30 ), rub n( 10 , 2 ), mes c( 15 ))
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  30 , 'январь')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  20 , 'февраль')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  50 , 'март')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  60 , 'апрель')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  70 , 'май')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  10 , 'январь')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  90 , 'февраль')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  1200 , 'март')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  400 , 'апрель')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  60 , 'май')



SELECT un,mes,SUM(rub) FROM mytab GROUP BY  1 , 2  INTO CURSOR cztr
SELE CZTR
SET SAFETY OFF
COPY TO "C:\ZTRMS.xls" TYPE XL5
KS=_TALLY+ 1 
SET SAFETY ON
oEXCEL=CREATEOBJECT("EXCEL.APPLICATION")
cFileName = "C:\ZTRMS.xls"
objBook = oExcel.WorkBooks.Open(cFileName)
oSheet = oExcel.WorkSheets("ZTRMS")
oExcel.Visible = .T.
objBook.PivotCaches.Add( 1 ,"ZTRMS!R1C1:R"+LTRIM(STR(KS))+"C3").CreatePivotTable("","СводнаяТаблица1", 1 )
oSheet1 = oExcel.WorkSheets("Лист1")
WITH oSheet1
  .PivotTables("СводнаяТаблица1").PivotFields("un").Orientation =  1 
   .PivotTables("СводнаяТаблица1").PivotFields("un").Position =  1 
    .PivotTables("СводнаяТаблица1").PivotFields("mes").Orientation =  2 
    .PivotTables("СводнаяТаблица1").PivotFields("mes").Position =  1 
ENDWITH   
oSheet1.PivotTables("СводнаяТаблица1").AddDataField(oSheet1.PivotTables("СводнаяТаблица1").PivotFields("sum_rub"), "Сумма по полю sum_rub",-  4157 )


objBook.Sheets.Add
SELECT DISTINCT UN,FIO FROM MYTAB INTO CURSOR CSPR2
GO TOP
KR=RECCOUNT()
GO top
_vfp.DataToClip(,, 3 )
oSheet2 = oExcel.WorkSheets("Лист2")
With oSheet2
	.PasteSpecial("Текст",.F.,.F.)
EndWith
oExcel.WorkSheets("Лист1").SELECT
oSheet1 = oExcel.WorkSheets("Лист1")
NROW= 4 
WITH oSheet1
	.RANGE(.Cells( 1 , 1 ),.Cells(KR+ 5 , 1 )).Insert
	.Range(.Cells( 1 , 2 ),.Cells(KR+ 5 , 2 )).EntireColumn.Hidden = .T.
FOR I= 1  TO KR
	NROW=NROW+ 1 
	.Cells(nrow, 1 ).Formula="=VLOOKUP(B"+LTRIM(STR(NROW))+",Лист2!A2:B"+LTRIM(STR(KR+ 1 ))+",2)"
ENDFOR
ENDWITH
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36503171
quxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НадеждаМДобрый вечер всем.
У меня есть запрос 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.
CREATE CURSOR myTab (un i( 4 ), fio c( 30 ), rub n( 10 , 2 ), mes c( 15 ))
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  30 , 'Январь')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  20 , 'февраль')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  50 , 'март')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  60 , 'апрель')
insert into myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  70 , 'май')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  10 , 'январь')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  90 , 'февраль')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  1200 , 'март')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  400 , 'Апрель')
insert into myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  60 , 'май')

insert into myTab  (un, fio, rub, mes) values ( 7 , 'Петров',  10 , 'декабрь')
insert into myTab  (un, fio, rub, mes) values ( 7 , 'Петров',  90 , 'февраль')
insert into myTab  (un, fio, rub, mes) values ( 7 , 'Петров',  1200 , 'март')
insert into myTab  (un, fio, rub, mes) values ( 7 , 'Петров',  400 , 'Июль')
insert into myTab  (un, fio, rub, mes) values ( 7 , 'Петров',  60 , 'май')

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT un,fio,;
ltrim(CAST(MAX(IIF(rn= 1 ,mes-'-'-LTRIM(STR(rub)),''))-;
MAX(IIF(rn= 4 ,','-mes-'-'-LTRIM(STR(rub)),''))-;
MAX(IIF(rn= 7 ,','-mes-'-'-LTRIM(STR(rub)),''))-;
MAX(IIF(rn= 10 ,','-mes-'-'-LTRIM(STR(rub)),''))-;
MAX(IIF(rn= 13 ,','-mes-'-'-LTRIM(STR(rub)),''))-;
MAX(IIF(rn= 16 ,','-mes-'-'-LTRIM(STR(rub)),''))-;
MAX(IIF(rn= 19 ,','-mes-'-'-LTRIM(STR(rub)),''))-;
MAX(IIF(rn= 22 ,','-mes-'-'-LTRIM(STR(rub)),''))-;
MAX(IIF(rn= 25 ,','-mes-'-'-LTRIM(STR(rub)),''))-;
MAX(IIF(rn= 28 ,','-mes-'-'-LTRIM(STR(rub)),''))-;
MAX(IIF(rn= 31 ,','-mes-'-'-LTRIM(STR(rub)),''))-;
MAX(IIF(rn= 34 ,','-mes-'-'-LTRIM(STR(rub)),'')) as c( 254 )), 1 ,',') txt;
from;
(SELECT un,fio,rub,UPPER(LEFT(mes, 1 ))+LOWER(SUBSTR(mes, 2 , 7 )) mes,atc(LEFT(mes, 3 ),'янвфевмарапрмайиюниюлавгсеноктноядек') rn FROM mytab)x;
group BY un,fio
Код: plaintext
1.
2.
3.
4.
un,fio,txt
1,"Иванов","Январь-30,Февраль-20,Март-50,Апрель-60,Май-70"
2,"Петров","Январь-10,Февраль-90,Март-1200,Апрель-400,Май-60"
7,"Петров","Февраль-90,Март-1200,Май-60,Июль-400,Декабрь-10"
где надо допилить :)
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36503363
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпрошелмимо,
Шахматка формируется в excel:

а мне какая разница?
я разве против был?
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36504238
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимоавторпрошелмимо,
Шахматка формируется в excel:
а мне какая разница?
я разве против был?
Все отчеты у которых количество столбцов не постоянное число стараюсь выводить в excel, при этом
делаю шапку и итоги,а как распечатать эту excel-таблицу(ужать в один лист ...) решает бухгалтер(молодой).
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36504288
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Всем спасибо за интересные советы, но я решила сделать по своему:

Сначала делаю в процедуре запрос, который выбирает нужную информацию по человеку, а затем вот таким образом получаю в одну строкуДату (месяц) - Сумму:

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 в отчет передать.
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36504301
quxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НадеждаМДобрый день. Всем спасибо за интересные советы, но я решила сделать по своему:.
;))
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36504322
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМДобрый день. Всем спасибо за интересные советы, но я решила сделать по своему:

в транзакте это делается одним запросом без курсоров.

Вы нагородили ерунды, извиняюсь,
почитайте форум ms-sql
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36504438
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читать вдумчиво:

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

и т.д. на эту тему


+ когда задаете вопрос, указывайте, что у Вас скл сервер
и нужно решение в синтаксисе транзакта,
а то нерод начал извращаться т.к. понять это было не возможно,
задаете ребусы, затем умозаключаете и оглашаете,
что вышли на собственную дорогу, странно....
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36504557
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимоНадеждаМДобрый день. Всем спасибо за интересные советы, но я решила сделать по своему:

в транзакте это делается одним запросом без курсоров.

Вы нагородили ерунды, извиняюсь,
почитайте форум ms-sql

Извините, ерунда не ерунда, делаем как умеем, пока что. Я не асс в написании SQL запросов, и в foxpro тоже. Пока только изучаю. Все что тут написали мне очень даже пригодится. Все ваши Замечания учту обязательно.
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36504667
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НадеждаМДобрый день. Всем спасибо за интересные советы, но я решила сделать по своему:

Сначала делаю в процедуре запрос, который выбирает нужную информацию по человеку, а затем вот таким образом получаю в одну строкуДату (месяц) - Сумму:

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.
USE tempdb

CREATE TABLE #myTab (un INT, fio CHAR( 30 ), rub DECIMAL( 10 , 2 ), mes CHAR( 15 ))
insert into #myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  30 , 'январь')
insert into #myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  20 , 'февраль')
insert into #myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  50 , 'март')
insert into #myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  60 , 'апрель')
insert into #myTab  (un, fio, rub, mes) values ( 1 , 'Иванов',  70 , 'май')
insert into #myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  10 , 'январь')
insert into #myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  90 , 'февраль')
insert into #myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  1200 , 'март')
insert into #myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  400 , 'апрель')
insert into #myTab  (un, fio, rub, mes) values ( 2 , 'Петров',  60 , 'май')

SELECT un, fio, [январь], [февраль], [март], [апрель], [май], [июнь], [июль], [август], [сентябрь], [октябрь], [ноябрь], [декабрь]
FROM  (SELECT un, fio, rub, mes FROM #myTab) SourceTable
PIVOT 
( SUM (rub)
FOR mes IN ([январь], [февраль], [март], [апрель], [май], [июнь], [июль], [август], [сентябрь], [октябрь], [ноябрь], [декабрь])) AS PivotTable
ORDER BY un
DROP TABLE  tempdb
С уважением, Алексей
...
Рейтинг: 0 / 0
Вопрос по отчету Foxpro+SQL
    #36508780
НадеждаМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все-таки можно как-то, то что находится в @str3 передать в отчет?
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос по отчету Foxpro+SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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