将另一个表的行显示为当前表的列

时间:2018-09-05 21:02:47

标签: sql-server-2008

考虑有两个表: 表1:

**Result          Total**
Pass             102
Fail              3
Undetermined      1

表2:

**Pass%   Fail%   Undetermined%**   
  96.23   2.83    0.94  

所需结果:

**Result     Total  Percentage**
Pass          102       96.23
Fail           3        2.83
Undetermined   1        0.94

如何将表2的行转换为表1中的列以获得结果?

1 个答案:

答案 0 :(得分:2)

首先,您可以尝试对unpivot进行Table2,然后对JOIN进行Table1

您的sql-server版本是2008,您可以在unpivot之前使用UNION ALL

CREATE TABLE T1(
  Result  VARCHAR(50),
  Total int
);
CREATE TABLE T2(
  Pass  FLOAT,
  Fail FLOAT,
  Undetermined FLOAT
);

insert into T2 VALUES (96.23,2.83,0.94)



INSERT INTO T1 VALUES ('Pass',102);
INSERT INTO T1 VALUES ('Fail',3);
INSERT INTO T1 VALUES ('Undetermined',1);

查询1

SELECT t1.*,s.val
FROM ( 
  SELECT Pass val,'PASS' Name
  FROM T2 
  UNION ALL
  SELECT Fail val,'Fail' Name
  FROM T2 
  UNION ALL
  SELECT Undetermined val,'Undetermined' Name
  FROM T2 
) s inner join T1 t1 on t1.Result = s.Name

Results

|       Result | Total |   val |
|--------------|-------|-------|
|         Pass |   102 | 96.23 |
|         Fail |     3 |  2.83 |
| Undetermined |     1 |  0.94 |

如果您可以将CROSS APPLYVALUE结合使用,则可以尝试一下。

查询

SELECT t1.*,s.val
FROM (
  SELECT v.* FROM T2 
  CROSS APPLY(VALUES 
       (Pass,'PASS'),
       (Fail,'Fail'),
       (Undetermined,'Undetermined')
  ) v(val,Name)
) s inner join T1 t1 on t1.Result = s.Name

Results

|       Result | Total |   val |
|--------------|-------|-------|
|         Pass |   102 | 96.23 |
|         Fail |     3 |  2.83 |
| Undetermined |     1 |  0.94 |
相关问题