在 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
这会给你想要的结果。
我有这样的例子 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
这会给你想要的结果。