подскажите плз вариант решения проблемы

ther
Дата: 22.06.2011 09:31:19
тема как перевести результирующий набор в строку уже обсасывалась..но у меня проблема в том что если я допишу прогу раньше чем в наших подразделениях обновятся с 7 на 2005 то конструкции типа pivot и FOR XML работать не будут..посему вопрос..какой есть вариант перевода результирующего набора в строку который был бы совместим со старенькой 7?
то есть примерно из
idtypevalue
1hdd80
1cpuintel
2hdd40
2cpuamd

получить
id hddcpu
180intel
240amd


спасибо
Guf
Дата: 22.06.2011 09:50:10
ther,
как-то так
IF OBJECT_ID('tempdb..#MyTable') IS NOT NULL
    DROP TABLE #MyTable
GO
CREATE TABLE #MyTable(
    id INT
   ,[type] VARCHAR(10)
   ,[value] VARCHAR(10)
)
INSERT INTO #MyTable(id, type, value)
          SELECT 1, 'hdd', '80'
UNION ALL SELECT 1, 'cpu', 'intel'
UNION ALL SELECT 2, 'hdd', '40'
UNION ALL SELECT 2, 'cpu', 'amd'  
 

SELECT q.id, MAX(q.hdd), MAX(q.cpu)
    FROM (SELECT id AS id
                ,(CASE [type]
                      WHEN 'hdd' THEN [value]
                      ELSE NULL
                  END) AS hdd
                ,(CASE [type]
                      WHEN 'cpu' THEN [value]
                      ELSE NULL
                  END) AS cpu
              FROM #MyTable
          ) q
    GROUP BY q.id
ther
Дата: 22.06.2011 10:04:12
спасибо большое...вроде то что надо
ther
Дата: 22.06.2011 11:35:59
все хорошо..но блина если
1 hdd 80
1 cpu intel
1 hdd 20
2 hdd 40
2 cpu amd

то все плохо...попробовал написать функцию где в курсоре собирались винты в строку типа "80/20" но время выполнения запроса для 500 записей возросло почти до 2 секунд((
ther
Дата: 22.06.2011 11:43:07
все отбой..заменил на
	declare @result varchar(100) 

  
SELECT @Result = isnull(@Result,'') + isnull([element],'')+'\' FROM dbo.getpc 
where [type]=5 and id=@PCID 

	return LEFT(@result, LEN(@result)-1)
и жизнь наладилась..относительно
iap
Дата: 22.06.2011 11:45:23
ther
все отбой..заменил на
	declare @result varchar(100) 

  
SELECT @Result = isnull(@Result,'') + isnull([element],'')+'\' FROM dbo.getpc 
where [type]=5 and id=@PCID 

	return LEFT(@result, LEN(@result)-1)
и жизнь наладилась..относительно
FAQ прочитали наверно?
ther
Дата: 22.06.2011 11:46:53
в смысле в функции заменил курсор на этот запрос выбора нескольких хардов
ther
Дата: 22.06.2011 12:07:22
ага..полезно иногда