![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с запросом!!! [D7, MSSQL]
OlkaGTS © (2003-10-09 12:31:00)
Уважаемые! Помогите, пожалуйста, с запросом, если это в принципе возможно.
DB MSSQL Server 2000
Есть 2 таблицы:
PriceKinds:
PKID NAME
1 Name1
2 Name2
3 Name3
Prices:
PKID TID Price
1 T1 P11
1 T2 P12
2 T1 P21
3 T2 P32
Надо получить следующее:
TID Name1 Name2 Name3
T1 P11 P21
T2 P12 P32
На словах это выглядит так:
Есть список видов цен. Вами цены храняться в таблице, где указывается вид цены, товар и сама цена. А получать надо таблицу, где первая колонка - товар, а дальше последовательно все виды цен и в них цены по товару, если таковые есть
Fiend (2003-10-09 16:31:00) [1]
CREATE PROCEDURE [MO_Get_OUT_To_Faces2] AS
declare @Max_Account int,
@Accounter int,
@Exec varchar(8000),
@ExecEx1 varchar(8000)
select "Column_ID"=identity(int,1,1),AP.Account_ID,AP.Account,
"SK_Account_ID"=J.Account_KT
into #Temp_Accounts
from MO_Journal_Operations J,ACC_Account_Plan AP
where J.Account_KT in (18,19,23,26) and J.Subconto_DT2 is not null and J.Account_DT=AP.Account_ID
group by AP.Account_ID,AP.Account,J.Account_KT
order by AP.Account
set @Max_Account=@@Identity
set @Accounter=1
set @Exec="select "+""""+"Накладная"+""""+"="+""""+"Общ.итог"+""","
set @ExecEx1=""
while @Accounter<=@Max_Account
begin
set @Exec=@Exec+""""+(select Account from #Temp_Accounts where Column_ID=@Accounter)+""""+
"=sum(case when J.Account_DT="+(select convert(varchar(4),Account_ID) from #Temp_Accounts where Column_ID=@Accounter)+
" and J.Account_KT="+(select convert(varchar(4),SK_Account_ID) from #Temp_Accounts where Column_ID=@Accounter)+" then J.Sum_Operation"+" else 0 end)"
set @ExecEx1=@ExecEx1+(select convert(varchar(4),Account_ID) from #Temp_Accounts where Column_ID=@Accounter)
if @Accounter<>@Max_Account set @ExecEx1=@ExecEx1+","
set @Exec=@Exec+","
set @Accounter=@Accounter+1
end
set @Exec=@Exec+""""+"Итого"+""""+"=sum(case when J.Account_DT in ("+@ExecEx1+") then J.Sum_Operation else 0 end) "
+"from MO_Journal_Operations J,ACC_Subconto S
where J.Account_KT in (18,19,23,26) and J.Subconto_DT2=S.Subconto_ID and S.Subconto_Type_ID =12"
exec(@Exec)
drop table #Temp_Accounts
GO
OlkaGTS (2003-10-09 16:17:00) [2]
Дайте, пожалуйста. Большое спасибо. E-Mail: OlkaGTS@mail.ru
Fiend (2003-10-09 15:38:00) [3]
могу для примера дать скрипт ХП которая строит т.н. шахматку. подойдёт?
там как раз неизвестно кол-во столбцов и всё динамически
Дуся (2003-10-09 14:46:00) [4]
Многие средства построения отчетов позволяют делать cross-table. Вам обязательно это в запросе делать?..
Простым select боюсь ничего не выйдет. С помощью sp и временных таблиц внутри - да.
OlkaGTS (2003-10-09 13:28:00) [5]
Число вариантов неизвестно. Сколько пользователь создаст, столько и будет
Дуся (2003-10-09 13:23:00) [6]
А число вариантов TID известно?..
в Books Online есть пример: Cross-Tab Reports.
OlkaGTS (2003-10-09 13:17:00) [7]
Каким образом использовать?
Fiend (2003-10-09 12:51:00) [8]
пользуйте динамический SQL.