Форум: "Начинающим";
Текущий архив: 2011.01.02;
Скачать: [xml.tar.bz2];
ВнизMSSQL. Два столбца в одну строку. Найти похожие ветки
← →
12 © (2010-10-08 14:35) [0]Есть таблица, пусть T1
T1.ID int
T1.Name char(10)
и есть таблица, пусть T2
T2.ID int
T2.С1 char(10)
T2.С2 char(10)
T1.ID связан с T2.ID
известно, что
select count(*)
from T1 join T2 on T1.ID=T2.ID
where T1.ID = :ANY_VALUE
не может быть больше 5.
Как получить
T1.ID, T1.Name, T2.С1, T2.С2, T2.С1, T2.С2, T2.С1, T2.С2, T2.С1, T2.С2, T2.С1, T2.С2
не в строчку, аля
SELECT
@Result = @Result + Convert(char(19),[DateTime],121) + Cast(CallResult as char(3))
From
[10.171.1.5].[icm1_hds].[dbo].[t_Dialer_Detail]
WHERE
DialingListID = @id
а именно, чтоб были столбцы
← →
stas © (2010-10-08 14:42) [1]если столбцы статичны, то:
case + group by
← →
stas © (2010-10-08 14:45) [2]если нет, то тоже самое только строим динамический запрос и выполняем его через exec.
← →
12 © (2010-10-08 14:45) [3]не понял вас..
← →
stas © (2010-10-08 14:54) [4]Ну допустим, у вас в таблице [10.171.1.5].[icm1_hds].[dbo].[t_Dialer_Detail] есть поле ID какое нибудь.
то строим запрос таким образом
Select
c1=MAX(case when id=1 then Convert(char(19),[DateTime],121) + Cast(CallResult as char(3)) else NULL end)
C2=MAX(case when id=2 then Convert(char(19),[DateTime],121) + Cast(CallResult as char(3)) else NULL end)
FROM
[10.171.1.5].[icm1_hds].[dbo].[t_Dialer_Detail]
WHERE
DialingListID = @id
В данном случае группировка ненужна, если надо, то сгруппируйте.
← →
stas © (2010-10-08 14:56) [5]Это статичный запрос т.е. заранее известно сколько будет колонок. А динамичный строите тоже самое в цикле и записываете в строковую переменную, которую потом выполните через exec.
← →
12 © (2010-10-08 15:04) [6]не, внутреннего ID второй таблицы нет
SELECT [DateTime], [CallResult]
From [10.171.1.5].[icm1_hds].[dbo].[t_Dialer_Detail] -- T2
[2010-10-08 14:39:29.267] [8]
[2010-10-08 14:50:15.240] [10]
а
SELECT DialingListID ID, CallResult, dbo.GetDetailDialer(DialingListID) Detail
FROM [10.171.0.4].[icm1_baA].[dbo].[DL_5010_5008] -- T1
[59] [10] [2010-10-08 14:39:29 8 2010-10-08 14:50:15 10]
а хотелось бы
[59] [10] [2010-10-08 14:39:29] [8] [2010-10-08 14:50:15] [10]
а я думаю типа что-то
CREATE FUNCTION DialerDetail
( @IDC int )
RETURNS
@DialerDetail TABLE
(ID int,
C1 datetime,
R1 int,
C2 datetime,
R2 int,
C3 datetime,
R3 int,
C4 datetime,
R4 int,
C5 datetime,
R5 int)
AS
тут курсор :(, который заполняет таблицу
и потом
select *
from T1 join DialerDetail(T1.ID)
← →
12 © (2010-10-08 15:05) [7]
> тут курсор :(, который заполняет таблицу
вот это и не нравится
← →
stas © (2010-10-08 15:09) [8]Если взять за основу Ваш пример, то можно так:
Declare @sql nvarchar(max)
SET @SQL="select "
SELECT
@SQL = @SQL +"К"+cast(NOMZAP as nvarchar(5))+"="+ Convert(char(19),[DateTime],121) + Cast(CallResult as char(3))
From
[10.171.1.5].[icm1_hds].[dbo].[t_Dialer_Detail]
WHERE
DialingListID = @id
--убрать лишние запятые из @sql
...
EXEC @SQL
← →
stas © (2010-10-08 15:10) [9]Тут nomzap какой-то идентификатор
← →
12 © (2010-10-08 15:46) [10]аа..
дошло :)
← →
12 © (2010-10-08 17:36) [11]но долго, не годится
10 000 записей в T1 и совсем скучно становится. А планируемое - до 100 000...
← →
DiamondShark © (2010-10-08 18:07) [12]
> не, внутреннего ID второй таблицы нет
Тогда никак.
Или курсор.
← →
sniknik © (2010-10-08 18:37) [13]чето никак не пойму чего тебе надобно... можешь на пальцах объяснить, БЕЗ запросов, которые как сам признаешь не работают так как тебе нужно, но ты этими кривыми запросами почему то описываешь логику...
вместо приведения исходного набора данных, и того во что он должен "превратится".
вообще поворот таблицы делается через pivot table (в аксесс команда, в mssql раздел справки в котором описано как)
← →
stas © (2010-10-11 13:39) [14]12 © (08.10.10 17:36) [11]
Честно говоря не понял почему долго. 100 000 это немного. Да и столбцов может быть ограниченное количество.
sniknik © (08.10.10 18:37) [13]
В MS SQL как я понял pivot работает только с фиксированным набором столбцов в отличии от акцесса, непонятно правда почему так в mssql.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.01.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.161 c