Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1284755365
Юрий
2010-09-18 00:29
2011.01.02
С днем рождения ! 18 сентября 2010 суббота


15-1284971610
tesseract
2010-09-20 12:33
2011.01.02
Свершилось товарищи. ShareWare процессор.


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


3-1250668168
Mike Kouzmine
2009-08-19 11:49
2011.01.02
Выбор записей


2-1286465941
Festil
2010-10-07 19:39
2011.01.02
Оптимизация операций над массивами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский