【问题标题】:Matrix result using SQL Server 2008 R2使用 SQL Server 2008 R2 的矩阵结果
【发布时间】:2018-02-23 05:46:36
【问题描述】:

我有一张如下图的表格:

示例

CREATE TABLE matrix
(
  a VARCHAR(10),
  b VARCHAR(10)
);

INSERT INTO matrix VALUES('A','H')
INSERT INTO matrix VALUES('B','I')
INSERT INTO matrix VALUES('C','J')
INSERT INTO matrix VALUES('D','K')
INSERT INTO matrix VALUES('E','L')
INSERT INTO matrix VALUES('F','M')
INSERT INTO matrix VALUES('G','N')
INSERT INTO matrix VALUES('A','M')

SELECT * FROM matrix;

看起来像:

a    b
-------
A    H
B    I
C    J
D    K
E    L
F    M
G    N
A    M

现在我想以以下矩阵格式显示结果:

预期结果:

     H    I    J    K    L    M    N
 --------------------------------------
 A | 1    0    0    0    0    1    0
   | 
 B | 0    1    0    0    0    0    0
   |
 C | 0    0    1    0    0    0    0
   |
 D | 0    0    0    1    0    0    0
   |
 E | 0    0    0    0    1    0    0
   |
 F | 0    0    0    0    0    1    0
   |
 G | 0    0    0    0    0    0    1

【问题讨论】:

标签: sql sql-server sql-server-2008-r2


【解决方案1】:
DECLARE @DynamicPivotQuery AS NVARCHAR(max)   
DECLARE @ColumnName AS NVARCHAR(max)   
DECLARE @ColumnName1 AS NVARCHAR(max) 

SELECT  @ColumnName = Isnull(@ColumnName+',', '') + b,         
        @ColumnName1 = Isnull(@ColumnName1+',', '') + 'isnull(' + b + ',0)' + ' as ' + b  
FROM   (    SELECT DISTINCT b   FROM   matrix)  AS   qry1

--Select @ColumnName,@ColumnName1  
SET @DynamicPivotQuery =      
' Select ' + @ColumnName1 + '    
from  (Select *,1 ''VALUE''  from matrix ) as t pivot  ( Sum(VALUE ) for b in (' +  @ColumnName      + '))   
as pvt ' 

--print @DynamicPivotQuery  
EXEC Sp_executesql  @DynamicPivotQuery 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2020-11-26
    相关资源
    最近更新 更多