Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.02;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
15-1285101741
Дмитрий Тимохов 2
2010-09-22 00:42
2011.01.02
Права админа на windows server 2008 R2


15-1284710570
stenfit
2010-09-17 12:02
2011.01.02
перевод фразы


2-1286535934
noob_one
2010-10-08 15:05
2011.01.02
Как из переменной перечисляемого типа получить строку


2-1284234927
vegarulez
2010-09-11 23:55
2011.01.02
Вопрос про TupDown как сделать больше 32767?


2-1286348534
Иван
2010-10-06 11:02
2011.01.02
запись в Record из memo