2015-07-08 3 views
0
**uid   pid mail value** 

    1   78  27  Nairobi 

    2   78  27  Milimani 

    3   78  27  Criminal 

    4   78  27  1427932800 

У меня есть таблица БД выше и нужны только значения столбца «значение». Я хочу, чтобы значения столбцов отображались в строках (не разделенных запятыми) для отчета с несколькими вкладками. мой идеальный результат был бы:Преобразование значений столбцов в значения строк

 **Nairobi Milimani Criminal 1427932800** 

Совпадения «Pid» и «почта» означает, что соответствующая «стоимость» от одного представления и изменений в идентификаторе почты (не захвачены здесь) является новым представлением !

так как я могу написать sql для преобразования значений столбца «значение» в значения строк? любая помощь очень ценится.

«Pivot» на самом деле не помог или я, вероятно, ошибаюсь. !!

+2

Какие СУБД вы используете? –

+0

Итак, если кто-то вставляет одну дополнительную строку, у вас вдруг будет 5 столбцов?!? – jarlh

+0

Я использую mysql –

ответ

0

SQL-Server Вы можете использовать PIVOT.

CREATE TABLE #Test 
(
    [uid] INT, 
    pid INT, 
    mail INT, 
    value NVARCHAR(60) 
) 
INSERT INTO #Test VALUES 
(1,   78,  27,  'Nairobi'), 
(2,   78,  27,  'Milimani'), 
(3,   78,  27,  'Criminal'), 
(4,   78,  27,  '1427932800') 

Это пример STATIC PIVOT:

SELECT [Nairobi], [Milimani], [Criminal], [1427932800] 
FROM (
    SELECT value 
    FROM #Test 
) x 
PIVOT 
(
MAX(value) 
FOR value in ([Nairobi], [Milimani], [Criminal], [1427932800]) 
) piv 
DROP TABLE #Test 

И это пример DYNAMIC PIVOT:

DECLARE @cols AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 

SELECT @cols = STUFF((SELECT ',' + QUOTENAME(value) 
        FROM #test 
        GROUP BY value, [pid] 
        ORDER BY [pid] 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

SET @query = N'SELECT ' + @cols + N' from 
      (
       SELECT value 
       FROM #test 
      ) x 
      PIVOT 
      (
       MAX(value) 
       FOR value IN (' + @cols + N') 
      ) p ' 

EXEC sp_executesql @query; 
+0

Почему и кто занижен? –

Смежные вопросы