Форум: "Базы";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
ВнизПомогите с запросом!!! Найти похожие ветки
← →
OlkaGTS (2003-10-09 12:31) [0]Уважаемые! Помогите, пожалуйста, с запросом, если это в принципе возможно.
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 12:51) [1]пользуйте динамический SQL.
← →
OlkaGTS (2003-10-09 13:17) [2]Каким образом использовать?
← →
Дуся (2003-10-09 13:23) [3]А число вариантов TID известно?..
в Books Online есть пример: Cross-Tab Reports.
← →
OlkaGTS (2003-10-09 13:28) [4]Число вариантов неизвестно. Сколько пользователь создаст, столько и будет
← →
Дуся (2003-10-09 14:46) [5]Многие средства построения отчетов позволяют делать cross-table. Вам обязательно это в запросе делать?..
Простым select боюсь ничего не выйдет. С помощью sp и временных таблиц внутри - да.
← →
Fiend (2003-10-09 15:38) [6]могу для примера дать скрипт ХП которая строит т.н. шахматку. подойдёт?
там как раз неизвестно кол-во столбцов и всё динамически
← →
OlkaGTS (2003-10-09 16:17) [7]Дайте, пожалуйста. Большое спасибо. E-Mail: OlkaGTS@mail.ru
← →
Fiend (2003-10-09 16:31) [8]
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
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c