このようなテーブルがあります
RowNum | TranNo | nTotalSales | nBalance
1 | 1 | 800 | 0
このように表示したい
RowNum | 1
cTranNo | 1
nTotalSales | 800
nBalance | 0
これどうやってするの?
このようなテーブルがあります
RowNum | TranNo | nTotalSales | nBalance
1 | 1 | 800 | 0
このように表示したい
RowNum | 1
cTranNo | 1
nTotalSales | 800
nBalance | 0
これどうやってするの?
これはあなたが求めているものであるを実行するとき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;
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
それは本当に楽しいことではありませんが、ここに 1 つの解決策があります。
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