Как преобразовать столбцы в строки? - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть такой стол

RowNum | TranNo | nTotalSales | nBalance
   1   |    1   |    800      |    0

и я хочу отобразить это так

RowNum      |   1
cTranNo     |   1
nTotalSales |  800
nBalance    |   0

Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 10 февраля 2012

Вот полный рабочий пример, когда вы делаете UNPIVOT, то, о чем вы просите, ваши типы 'значений' должны быть одного типа, поэтому приводите их как хотите.В моем примере я привел их всех к VARCHAR (20):

DECLARE @bob TABLE
(
    RowNum INT,
    TranNo INT,
    nTotalSales INT,
    nBalance INT
);
INSERT INTO @bob(RowNum, TranNo, nTotalSales, nBalance)
VALUES(1, 1, 800, 0);


WITH T AS (
    SELECT CAST(RowNum      AS VARCHAR(20)) AS RowNum,
           CAST(TranNo      AS VARCHAR(20)) AS TranNo,
           CAST(nTotalSales AS VARCHAR(20)) AS nTotalSales,
           CAST(nBalance    AS VARCHAR(20)) AS nBalance
    FROM @bob
)

SELECT attribute, value
FROM T
UNPIVOT(value FOR attribute IN(RowNum, TranNo, nTotalSales, nBalance)) AS U;
1 голос
/ 10 февраля 2012

Это не очень весело, но вот одно из решений:

SELECT 'RowNum', RowNum FROM tbl
UNION
SELECT 'cTranNo', TranNo FROM tbl
UNION
SELECT 'nTotalSales', nTotalSales FROM tbl
UNION
SELECT 'nBalance', nBalance FROM tbl

Это превратит столбцы в строки.Если вы хотите, чтобы каждая из строк столбцов была чересстрочной, вам может потребоваться ввести номер записи вместе с некоторой сортировкой.

Это будет выглядеть так:

    SELECT 'RowNum' AS ColName, RowNum AS [Value], RowNum FROM tbl
    UNION
    SELECT 'cTranNo' AS ColName, TranNo, RowNum FROM tbl
    UNION
    SELECT 'nTotalSales' AS ColName, nTotalSales, RowNum FROM tbl
    UNION
    SELECT 'nBalance' AS ColName, nBalance, RowNum FROM tbl
    ORDER BY RowNum, ColName
1 голос
/ 10 февраля 2012
SELECT 'RowNum' TITLE, RowNum AS [VALUE]
FROM TABLE
UNION ALL
SELECT 'TranNo', TranNo
FROM TABLE
UNION ALL
SELECT 'nTotalSales', nTotalSales
FROM TABLE
UNION ALL
SELECT 'nBalance', nBalance
FROM TABLE
...