在 SQL 服务器中查询 select 从行到列的数据

Query to select data from row into column in SQL Server

我有这样的例子 table :

type          value
-----------------------
Name      |   John
Gender    |   Male
Address   |   New City
Phone     |   62813 
etc...    |   etc...

我想进行查询并将数据从行显示到列,预期结果如下:

Name    Gender    Address     Phone     etc...
----------------------------------------------
John  |  Male  |  New City |  62813  |  etc...

在这种情况下等...意味着 table 中有更多数据。是否有任何解决方案可以显示 table 从行到列,其中包含 table 中的许多数据?

您需要使用 Pivoting 来解决此类问题。

让我们创建一个小演示 table T2 并从中继续。

Create table T2 (type varchar(100),Value varchar(100));
insert into T2 Values('Name','John');
insert into T2 Values('Gender','Male');
insert into T2 Values('Address','New City');
insert into T2 Values('Phone','62813');

现在,如果这是准确的数字,那么我们可以对 type 的列值进行硬编码,并在我们的 sql 中使用它,如下所示。

SELECT [Name]
    ,[Gender]
    ,[Address]
    ,[Phone]
FROM (
    SELECT type
        ,Value
    FROM T2
    ) AS T1
PIVOT(Min(Value) FOR type IN (
            [Name]
            ,[Gender]
            ,[Address]
            ,[Phone]
            )) PVT;

但是如果您的 table 中有很多行并且您希望它是动态的,那么您可以使用动态查询来处理此类问题。

DECLARE @dml AS NVARCHAR(MAX);
DECLARE @ColumnName AS NVARCHAR(MAX);

SELECT @ColumnName = ISNULL(@ColumnName + ',', '') + QUOTENAME(type)
FROM (
    SELECT type
    FROM T2
    ) AS T1;

--Prepare the PIVOT query using the dynamic 
SET @dml = N'SELECT ' + @ColumnName + ' FROM
  (
  SELECT type,
        Value
 FROM T2
) AS T1
PIVOT (Min(Value)
FOR type IN (' + @ColumnName + ')) AS PVT'

--Print @DynamicPivotQuery
--Execute the Dynamic Pivot Query
EXEC sp_executesql @dml

这会给你想要的结果。